https://programmers.co.kr/learn/courses/30/lessons/84512 코딩테스트 연습 - 모음사전 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니 programmers.co.kr 해설 : 모음으로만 이루어진 5글자 이하의 문자열이 주어질 때, 사전순으로 "A"부터 "UUUUU" 까지의 모든 단어들 중 몇 번째 순서에 위치하는지 찾는 문제이다. 풀이 : 사전순으로 몇 번째 위치에 있는지 알기 위해 "A" 부터 "UUUUU"까지 담겨있는 list를 만들었다. 정말 무식한 방법을 사용한 것 같다...
https://programmers.co.kr/learn/courses/30/lessons/86491?language=python3 코딩테스트 연습 - 최소직사각형 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 해설 : 명함을 수납할 수 있는 지갑을 만들기 위해 조사한 명함들의 가로, 세로 길이들이 주어진다. 이 길이들을 모든 명함을 수납할 수 있는 명함지갑의 최소 사이즈를 찾으면 된다. 풀이 : 명함을 수납할 때 옆으로 돌려서 수납할 수 있는 경우, 즉 가로와 세로의 길이가 바뀌어 보관하는 경우가 있기 때문에 가로와 세로 길이를 잘 조정해야..
https://programmers.co.kr/learn/courses/30/lessons/86971 코딩테스트 연습 - 전력망을 둘로 나누기 9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3 7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1 programmers.co.kr 해설 : 트리형태로 연결되어있는 전력망이 있다. 트리의 간선들 중 하나를 끊어 두 개의 트리로 나눈다고 할 때, 이 두 트리의 노드 개수의 차이가 최소가 되는 값을 찾으면 된다 풀이 : 트리의 탐색은 BFS로 진행했지만 전체적인 구조는 완전탐색으로 진행하였다. 간선들의 정보가 주어진 wires 배열에서 인덱스별로 하나씩 삭제하는 경우를 copy하여 bfs로 탐색하..
https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr 해설 : 카펫이 다음과 같이 테두리는 갈색, 속 알멩이는 노란색으로 칠해져 있다. 갈색 칸의 개수와, 노란색 칸의 개수만을 알고 있을 때 원래 카펫의 가로와 세로 길이를 찾으면 된다. 풀이 : 문제의 분류가 완전탐색로 구분되어있어 크게 봤을 땐 완전탐색이 맞다. 하지만 수학적인 부분들을 생각하는 것에 시간이 더 걸렸던 것 같다. 먼저 갈색, 노란색 블록의 개..
https://programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 해설 : 자연수 n이 주어질 때, 세로의 길이가 2이고 가로의 길이가 n인 공간에 2x1 또는 1x2 모양의 타일을 가득 채우려고 한다. 이 때 채울 수 있는 가짓수를 출력하면 된다. 풀이 : DP문제이다. 종이에 그림을 그려가며 가짓수를 체크해 보았는데 n이 5정도 되었을 때 규칙이 보였다. n이 1씩 증가하면 n-1을 채우는 경우와 n-2를 채우..
https://programmers.co.kr/learn/courses/30/lessons/68644 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 해설 : 숫자들로 이루어진 배열이 주어질 때, 각 요소들을 두 개씩 뽑아서 더한 모든 결괏값을 오름차순으로 정렬해서 출력하는 문제이다. 풀이 : for 문을 이중으로 사용하여 요소를 두 개 뽑아서 더한 결괏값을 배열에 넣고 중복을 제거하기 위해 set으로 변환시키고 이를 오름차순으로 정렬하여 출력하면 된다. ite..
https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 해설 : 괄호들로 이루어진 문자열 s가 주어질 때, s를 왼쪽으로 한 칸씩 회전시켜 올바른 괄호 문자열 (모든 괄호들의 짝이 맞는) 이 몇 개 존재하는지 세는 문제이다. 풀이 : 첫 번째로 문자열 s의 길이만큼 s의 가장 왼쪽 요소를 가장 뒤에 붙여주는 작업을 구현했고 이 작업이 수행될 때마다 s가 올바른 괄호 문자열인지 판별하는 함수를 구현하였다. 올바른 괄호 문자열인지 확인하는 방법은 stack 자료구조를 사용하여 s의 왼쪽부터 stack에 쌓고 stack의 top이 넣으려는 괄호와 짝이 맞는다면 제거하는 식으로 진행하여 마지막에 st..
https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 우선, 분류를 구현 문제로 하였지만 사실 투 포인터 문제이다. 이 한 문제 때문에 카테고리를 새로 만들기가 좀 그래서 우선 구현에 넣어두었다. 추후 투 포인터 개념의 문제들을 더 풀게 된다면 카테고리를 옮기도록 하겠다. 해설 : 보석들의 이름이 담겨있는 배열이 주어질 때, 모든 보석의 종류들을 포함하는 가장 짧은 구간을 찾는 문제이다. 풀이 : 문제 설명은 간단하지만 투 포인터의 개념을 모른다면 쉽지 않은 문제..