본문 바로가기

Algorithm

(185)
프로그래머스: 광고 삽입 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/72414 코딩테스트 연습 - 광고 삽입 시간을 나타내는 HH, H1, H2의 범위는 00~99, 분을 나타내는 MM, M1, M2의 범위는 00~59, 초를 나타내는 SS, S1, S2의 범위는 00~59까지 사용됩니다. 잘못된 시각은 입력으로 주어지지 않습니다. (예: 04:60:24, 11 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 모든 주어진 시간 문자열을 초(second)로 변환 IMOS 기법을 적용해 logs 속 모든 시청 시간들을 표현 영상의 시작부터 각 초까지의 누적 값 배열을 초기화 영상의 시작부터 광고가 모두 틀어질 수 있는 시간까지, 반복문을 통해 특정 ..
프로그래머스: 하노이의 탑 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/12946 코딩테스트 연습 - 하노이의 탑 하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. dfs 기반 재귀호출을 통해 n개의 원판 문제를 줄여 나간다. 해당 문제는 n개의 원판 문제를 어떻게 쪼개서 해결할 수 있는 지가 중점인 문제이다. 흔히 이런 문제의 경우 총 움직인 횟수 등을 물어보는데, 이 문제의 경우는 과정 자체를 답으로 요구하기 때문에 n개의 원판을 쪼개며 이들이 ..
프로그래머스: 2xn 타일링 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 점화식 dp[n] = dp[n - 1] + dp[n - 2]을 적용해 연산 해당 문제는 점화식을 발견만 하면 되는 문제이다. 가로 길이가 n인 타일을 채우기 위해선 이보다 작은 가로 길이를 찾은 개수들에서 몇 개를 더하면 되는데, 왜냐하면 한 번에 가로 길이를 +1만 시키려면 2x1 타일을 하나를 ..
프로그래머스: 110 옮기기 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/77886 코딩테스트 연습 - 110 옮기기 0과 1로 이루어진 어떤 문자열 x에 대해서, 당신은 다음과 같은 행동을 통해 x를 최대한 사전 순으로 앞에 오도록 만들고자 합니다. x에 있는 "110"을 뽑아서, 임의의 위치에 다시 삽입합니다. 예를 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 주어진 문자열에 대해 부분 문자열 "110"을 제거(스택 방식 적용)하면서 개수 카운트 해당 "110"을 개수만큼 이어붙인 문자열 A 생성 부분 문자열 "110"을 제거한 남은 문자열에 앞의 문자열 A를 넣을 적절한 위치 탐색 후 해당 위치에 삽입 해결 방법을 찾기가 매우 까다로웠던 문제..
프로그래머스: 섬 연결하기 [JAVA] 문제 링크 https://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 풀이 전체적인 풀이 과정은 다음과 같다. 주어진 점들의 연결 정보를 통해 최소 신장 트리를 구성 해당 문제는 문제 자체에서 요구하는 바가 섬들 간의 최소 신장 트리를 구성하고 총 거리를 반환하는 것이기 때문에, 최소 신장 트리 생성 알고리즘을 적용하면 된다. 여기서 나는 크루스칼 알고리즘을 적용해 문제를 해결했는데, 거리 간 비용의 정렬을 쉽게 하고자 우선순위 큐를 사용하고, 해당 큐에 넣을 정보 클래스 간의 compareTo 함수를 오버라이딩했다...
프로그래머스: 모두 0으로 만들기 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/76503 코딩테스트 연습 - 모두 0으로 만들기 각 점에 가중치가 부여된 트리가 주어집니다. 당신은 다음 연산을 통하여, 이 트리의 모든 점들의 가중치를 0으로 만들고자 합니다. 임의의 연결된 두 점을 골라서 한쪽은 1 증가시키고, 다른 한 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 입력 받은 edges 배열을 바탕으로 각 노드의 인접 노드 리스트, 인접 노드 개수 배열을 초기화 리프노드 (인접 노드 개수가 1개)만 우선적으로 큐에 입력 BFS 탐색을 통해 해당 노드의 값을 인접 노드에 넘기면서, 해당 인접 노드의 인접 노드 개수 카운트를 1 감소 해당 인접 노드 또한 인..
프로그래머스: 아이템 줍기 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/87694 코딩테스트 연습 - 아이템 줍기 [[1,1,7,4],[3,2,5,5],[4,3,6,9],[2,6,8,8]] 1 3 7 8 17 [[1,1,8,4],[2,2,4,9],[3,6,9,8],[6,3,7,7]] 9 7 6 1 11 [[2,2,5,5],[1,3,6,4],[3,1,4,6]] 1 4 6 3 10 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 직사각형 배열을 순차대로 입력받아 이차원 배열 map에 표시 (각 길이를 2배로, 모서리와 내부 구분) 시작 위치 값을 큐에 넣으며 BFS 탐색 시작 결과로 얻은 길이 값을 2로 나눈 후 반환 전체적인 문제의 흐름은 BFS이기에..
프로그래머스: 경주로 건설 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 맵의 해당 위치 별로 방향마다 최소..