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 우선, 분류를 구현 문제로 하였지만 사실 투 포인터 문제이다. 이 한 문제 때문에 카테고리를 새로 만들기가 좀 그래서 우선 구현에 넣어두었다. 추후 투 포인터 개념의 문제들을 더 풀게 된다면 카테고리를 옮기도록 하겠다. 해설 : 보석들의 이름이 담겨있는 배열이 주어질 때, 모든 보석의 종류들을 포함하는 가장 짧은 구간을 찾는 문제이다. 풀이 : 문제 설명은 간단하지만 투 포인터의 개념을 모른다면 쉽지 않은 문제..
https://programmers.co.kr/learn/courses/30/lessons/12985 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr 해설 : N명의 사람들이 토너먼트 대회를 진행하는데 A라는 사람과 B라는 사람이 있고, 모든 경기를 이긴다고 가정했을 때, 몇 번의 경기를 거쳐야 서로 만날 수 있는지 찾는 문제이다. 풀이 : 우선, 둘은 모든 경기에 이긴다고 가정했으므로 반드시 만나는 것이 보장되어있다. 따러서 while문을 사용해도 무한루프가 돌일은 없고, while..
https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 해설 : NxN의 2차원 배열의 (0,0) 지점에서 시작하는 사람이 벽으로 막히지 않은 길을 따라 최종 목적지인 (N-1,N-1)까지 도달하려 할 때, 최단거리로 도착할 수 있는 거리를 출력하는 문제이다. 풀이 : BFS나 DFS를 사용하는 문제이다. 나는 BFS가 더 익숙해서 BFS로 해결하였다. 시작점에서..
https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 해설 : 컴퓨터의 개수 n과 컴퓨터 사이의 연결관계인 computers배열이 주어질 때, 컴퓨터들 사이에 몇 개에 독립적인 그래프가 있는지 찾는 문제이다. 풀이 : BFS 또는 DFS로 구현할 수 있는 문제이다. 그래프의 탐색을 구현할 수 있는지 묻는 문제인데 나는 BFS로 풀었다. 우선, 노드 사이의 연결관계인 computers 배열에서 탐색하지 않은 노..
https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 해설 : 숫자로 이루어진 문자열이 주어질 때, 각 자릿수들을 조합해서 만들 수 있는 모든 수들 중 소수만 찾아서 개수를 출력하면 된다. 풀이 : numbers에 담겨있는 숫자의 각 자릿수들을 1부터 numbers의 길이만큼 개수만큼 조합한 모든 수들에 대해 isPrime함수를 통해 소수인지 판별한다. 소수일 경우 answer에 1을 추가해주었고 s..
https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 해설 : 0 또는 양의 정수들이 담긴 배열이 주어졌을 때 각 원소들을 붙여 만들 수 있는 가장 큰 수를 출력하면 된다. 풀이 : 모든 원소들을 이어 붙이기 위해 str 형태로 바꿔준 후 내림차순 정렬하고 앞에서부터 이어붙이면 된다. 여기서 핵심은 내림차순 정렬할 때 단순히 정렬하게 된다면 문제가 생..