본문 바로가기

분류 전체보기

(31)
[프로그래머스/JAVA] 표현 가능한 이진트리 문제 바로가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 먼저, 포화 이진트리를 만들어야한다. 포화 이진트리의 노드 개수는 항상 [2 ^ N - 1] 개이다. 그렇기 때문에 주어진 숫자를 2진수로 나타날때 2진수의 길이 또한 [2 ^ N - 1]개이다. 만약 8이라는 숫자가 주어진다면, 8은 이진수로 1000 이다. 1000의 길이는 4이므로 [2 ^ N -1]개가 아니다. [2 ^ N -1]개를 충족하며 가장 짧은 길이를 구한다면 [2 ^ 3 - 1]개이다. 이는 7개이다. 이제 1000을 7개의 값을 가진 이진수로 만든다면 00010..
[백준/JAVA] 1976번: 여행 가자 문제 보러가기 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net [문제 풀이] List에 노드간 연결이 되어있다면 연결을 저장하고, 연결이 되어있지 않거나 자기 자신이라면 저장하지 않았다. 출발 지점을 방문하게 될 노드 중 한가지로 선택하고 BFS를 통해 갈 수 있는 노드를 배열에 표시하였다. 배열이 완성된다면 방문하게 될 노드 중 표시되어있지 않다면 "NO", 모두 표시 되어있다면 "YES"를 출력한다. [코드] import java.io.*; import java.util.*; class Main { sta..
[백준/JAVA] 2109번: 순회강연 문제 보러가기 2109번: 순회강연 한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다. www.acmicpc.net [문제 풀이] 예제의 마감일을 수정하여 대학에서 제시한 강연료 p를 기준으로 내림차순 하였다. 제시한 값 마감일 100 2 50 5 20 1 10 3 8 2 5 6 2 1 첫번째 제시한 값은 100이고 마감일은 2일이다. 즉, 1일 혹은 2일에 강연을 하면 된다. 두번째 제시한 값은 50이고 마감일은 5일이다. 1일/2일/3일/4일/5일에 강연을 하면 된다. 같은 방식으로 마지막으로 제시한 값 2이고 마감일이 1..
[백준/JAVA] 15591번: MooTube (Silver) 문제 보러가기 15591번: MooTube (Silver) 농부 존은 1번 동영상과 2번 동영상이 USADO 3을 가지고, 2번 동영상과 3번 동영상이 USADO 2를 가지고, 2번 동영상과 4번 동영상이 USADO 4를 가진다고 했다. 이것에 기반해서 1번 동영상과 3번 동영상의 www.acmicpc.net [문제 풀이] USADO을 통해 알 수 있는 것은 USADO를 지나는 경로의 가중치 중 가장 작은 값을 가지게 된다. 예제를 예시로 들자면 1 2 3 2 3 2 2 4 4 1번과 4번 정점은 USADO로 연결되어 있지 않다. 그렇기 때문에 USADO에서 주어진 1번에서 2번 정점으로 가고 2번 정점에서 4번 정점으로 가는 방식으로 1번과 4번 정점을 연결하는데, 이때 가중치는 USADO를 통해 가는..
[백준/JAVA] 14267번: 회사 문화 1 문제 보러가기 14267번: 회사 문화 1 영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하 www.acmicpc.net [문제 풀이] 그래프를 사용하기 위해서 List를 만들어주고 2번부터 N번까지의 상사의 번호에 부하번호를 넣어주었다. 상사의 번호와 칭찬 정도를 총합 칭찬 배열에 넣어주고 List에서 직속 부하 정보를 가져와서 직속 부하의 번호와 칭찬 정도를 총합 칭찬 배열에 넣어주면 완성! 이 아니였다. 시간초과가 나왔다. 시간초과를 해결하기 위한 방법으로 입력으로 주어지는 상사의 번호와 칭찬 정도를 배열로서 입력을 추가하고 나중에 배열에 저장된 정보를 바탕으로..
[백준/JAVA] 1261번: 알고스팟 문제 보러가기 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net [문제 풀이] 다익스트라를 사용하여 풀었는데, 사실 풀고나서도 긴가민가하다. 좌표 이동을 (x+1, y), (x-1, y), (x, y+1), (x, y-1)로 하면서 동시에 좌표 이동했을 때에 뚫게 되는 벽의 수를 기존의 다익스트라 배열 값과 비교하여 좌표 이동했을 때가 벽의 수가 더 적다면 배열을 갱신을 하고 이동된 좌표를 큐에 넣는다. 큐에서 좌표를 꺼내 다시 좌표이동을 하고 비교를 하였다. 다익스트라 배열에는 해당 좌표..
[백준/JAVA] 25635번: 자유 이용권 문제 보러가기 25635번: 자유 이용권 자유 이용권은 놀이공원의 모든 놀이기구를 횟수의 제한 없이 마음껏 이용할 수 있는 이용권이다. 준원이는 ANA 놀이공원의 자유 이용권을 구매했고, 최대한 많이 놀이기구를 이용할 생각이다. www.acmicpc.net [문제 풀이] 만약 같은 놀이기구를 이용할 수 있다면 모든 횟수를 더해주면 그만이지만, 같은 놀이기구를 매번 이용할수 없다는 제한사항이 있다. 우리가 찾아야 할 것은 가장 큰 사용 횟수를 가진 놀이기구였다.왜? 가장 큰 횟수의 놀이기구를 모두 탈 수 있을까? 아닐까? 라는 고민을 시작한 이유는 같은 놀이기구를 매번 탈 수 는없지만, 사실 2개의 놀이기구만 있어도 돌아가면서 탈 수 있다. 이것을 가장 큰 횟수를 가진 놀이기구를 다른 놀이기구와 번갈아 타..
[백준/JAVA] 1285번: 동전 뒤집기 문제 보러가기 1285번: 동전 뒤집기 첫째 줄에 20이하의 자연수 N이 주어진다. 둘째 줄부터 N줄에 걸쳐 N개씩 동전들의 초기 상태가 주어진다. 각 줄에는 한 행에 놓인 N개의 동전의 상태가 왼쪽부터 차례대로 주어지는데, 앞면이 위 www.acmicpc.net [문제 풀이] 이 문제의 태그에 비트마스킹이 있는 이유는 모든 행의 조합을 따져서 동전을 뒤집어봐야한다. 예제를 보면 N = 3일 때 1행, 2행, 3행이 있다. 이때 {1행}, {2행}, {3행}, {1, 2행}, {1, 3행}, {2, 3행}, {1, 2, 3행} 등의 조합을 고려해서 경우의 수를 따져야하기 때문에 비트마스킹이 필요하다. 물론, 아무 행도 고르지않는 경우의 수도 따져야 한다. N에 따라 조합이 몇 개인가 따지자면, 2 ^ N..