목록프로그래머스 (17)
배움 저장소
programmers.co.kr/learn/courses/30/lessons/42861 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 최소신장트리를 확인할 수 있는 알고리즘을 사용하여야 한다. 크루스칼 알고리즘을 사용하여 풀었다. GeeksForGeeks의 코드는 복잡해서 www.programiz.com/dsa/kruskal-algorithm를 참고했다. int find_Root(vector &root, int i){ if(root.at(i)==i){ return i; } return find_Root(root, root.at(i)); } bool compare(vector a, vector b){ ret..
programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 간단하게 문제를 풀 수 있는 아이디어는 자동차를 빨리 진입한 순서대로 정렬하는데서 부터 시작한다. 그 후 첫 자동차와 두 번째 자동차가 공유하고 있는 도로를 업데이트하는 것이 문제풀이의 핵심이다. int solution(vector routes) { sort(routes.begin(), routes.end()); int answer = 1; // 공유하고 있는 도로의 시작 지점 int common_begin = routes[0][0]; // 공유하고 있는 도로의 끝 지점 int c..
programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 레벨 2라고 되어있지만 체감은 훨씬 어려웠던 문제. 문자를 조이스틱의 최소한의 움직임으로 출력하라는 문제를 읽고 막막했다. 조이스틱이 움직이는 걸 일일이 세는 것도 생각해야 하는데, 최소한의 움직임까지 고려하라니. 일단 간단한 사례를 직접 실행해보고 문제를 풀려고 하는 편이라 머리가 아팠다. 갓글 검색 덕분에 아이디어를 얻었다. 그 중에 A에서 출발할지 Z..
programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr index를 활용하여 문제를 풀려면 최종 결과물의 length를 계산해서 code를 짜야하는데 어떻게 할 지 엄두가 나지 않았다. 다른 분이 짠 코드를 보고, 생각난 아이디어를 밀어붙여서 어떻게든 완성시켜야 한다는 걸 알게 되었다. 풀이1. Index를 이용한 풀이 string solution(string number, int k) { string answer; int begin = 0; int cvrted_size = number.size() - k; for(int i=0; i= i-k 로 정리해서 사용해도 된다. 풀이3. 실패한 첫 풀이 string..
programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 처음엔 map으로 문제를 풀었다. 백터로 할 수도 있겠다 싶었음. 백터가 가지고 있는 값을 흔히 i로 가리킨다. 이 i로 학생을 가리키고 있어서 백터로 풀 수 있는 것 같다. 학생을 고유 이름을 나타냈다면 백터로 풀기 힘들었을까? 그럼 문제의 조건이 완전히 바뀌긴 한다. map을 사용하는 문제는 백터 2개를 사용하면 풀수 있지만 번거롭다. 문제를 제대로 읽지 않아서 reserv..
programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 디스크 작업이 진행되는 도중에 더 높은 우선순위를 가진 작업 명령이 입력되면 진행중이던 작업을 그만 두고 새로운 작업명령을 실행해야 하는가?라는 질문에 바로 답을 할 수 없어서 애먹었다. 문제의 조건에서 "하드디스크가 작업을 수행하고 있지 않을 때에는 먼저 요청이 들어온 작업부터 처리합니다."를 보고 힌트를 얻었다. 작업을 진행하는 도중에는 우선순위가 높더라도 무시하겠지..
programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr loop마다 매번 정렬을 하면 nlogn시간을 소모한다. 효율성 시험을 통과하기 위하여 priority_queue나 heap을 사용해주면 된다. heap을 사용하면 매번 begin~end까지 모든 요소를 입력하기 떄문에 귀찮다. priority_queue를 훨씬 간단하게 쓸 수 있다. bool compare(int a, int b){ return a>b; } in..
programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 문제를 봤을 때 Queue, Stack, For & While 중 어느 자료 구조를 활용해야 할 지 감을 잡아야 문제를 빨리 풀 수 있을 것 같은데 별로 감이 안온다. 그냥 PseudoCode 쓰면서 결정하는 편인데, 문제만 읽고 자료 구조를 선택할 수 있는 수준이 되고 싶다. 풀이 1. (진행상황 + 진행속도 * 일자)를 계산하여 100이 넘었을 때 답 넘기기 vec..