Algorithm/Programmers 48

[프로그래머스] 단체 사진 찍기 - Java

문제 설명 코딩테스트 연습 - 단체사진 찍기 단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 programmers.co.kr 접근 방법 해당 문제는 정해진 8명의 캐릭터에 대해 줄을 세우는데, 어떤 조건을 충족시키면서 줄을 세울 수 있는 경우의 수를 요구하고있다. 우선 단순히 8명을 줄을 세운다면 전체 경우의 수는 40320(8!)이다. 즉, 특정 조건을 충족시키는 경우의 수는 이 보다 작을 것이다. 일차적으로 백트래킹을 이용해 주어진 캐릭터 8명에 대해서 순열을 구하는 로직을 작성했다. private void lineUp(boolean[] visited, int dep..

[프로그래머스] 구명보트 - Java

문제 설명 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 접근 방법 해당 문제에서 요구하는 것은 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값입니다. 이때 유의해야할 것은 한 구명보트에 탈 수 있는 사람은 최대 2명뿐이고, 무게 제한이 있다는 점입니다. 즉, 키 포인트(key point)는 최대한 구명보트에는 두 사람씩 태우도록 해야한다는 점입니다. 이를 위해 우선 주어진 정수형 배열(people) 오름차순으로 정렬 해줍니다. (내림차순으로 해도 무방합니다.) 이때 무게..

[프로그래머스] 다리를 지나는 트럭 - Java

문제 설명 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 접근 방법 해당 문제는 큐(Queue) 자료구조를 이용하여 해결할 수 있었습니다. 문제에 따르면 트럭의 상태는 "대기 트럭"과 "다리를 건너는 트럭" 그리고 "다리를 지난 트럭"으로 나뉩니다. 이때 각각의 트럭의 상태들을 관리할 큐 자료구조를 만들어 줍니다.("다리를 지난 트럭"에 대한 큐 자료구조는 별도로 만들 필요없습니다.) 이후 다리를 건널 수 있는 조건(무게와 트럭 대수)을 충족 하는 경우 "대기 트럭을 담은 큐"에서..

[프로그래머스] 괄호 변환 - Java

문제 설명 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 접근 방법 파라미터로 입력받은 괄호 문자열을 문제에서 주어진 방식대로 변환시켜주면 됩니다. 우선 첫 번째 조건에 따르면 입력(String p)이 빈 문자열인 경우, 단순히 빈 문자열을 반환하기만 하면됩니다. if (p.isEmpty()) return p; 그렇지 않을 경우 해당 문자열(반드시 균형잡힌 괄호 문자열)을 두 개의 문자열로 분리하는데 이 중 하나는 더 이상 분리될 수 없는 균형잡힌 괄호 문자열, 나머지 하나는 이외 나머지의 문자열로 빈 문자열..

[프로그래머스] 프린터 - Java

문제 설명 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 접근 방법 우선 주어지는 문서들의 중요도가 중복될 수 있으므로 각각의 문서별 ID를 만들어 이를 Map으로 관리하도록 했습니다. Map documentsById = new HashMap(); for (int i = 0; i < priorities.length; i++) { documentsById.put(i, priorities[i]); } 이후 문서별 ID들을 Queue에 순서대로 넣은 후 각 문서별 ID를 나머지 문서별 ID들과 비교하여 자기 자신 보..