알고리즘 풀이 354

[Level 2] n진수 게임

https://programmers.co.kr/learn/courses/30/lessons/17687 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr 접근 먼저 10진수로 진행했을 때 가장 마지막에 말해야하는 숫자까지 n진수로 변환하여 특정 문자열에 저장한다. 이후 n진수로 게임을 진행했을 때 말해야하는 범위까지 입력된 사용자의 차례의 수를 최종해에 대입한다. 구현 - 아래의 함수는 10진수를 n진수로 변환하는 함수이다. - s에 아래와 같이 초기화를 시킨 후에 number를 n으로 나눈 나머..

[SWEA 1949] 등산로 조성

접근 최대 높이를 찾고 2차원 맵을 탐색해서 최대 높이의 위치에서 DFS를 진행한다. 현재 위치에서 상하좌우 탐색을 진행하고 현재 위치보다 높이가 작은 위치로 이동한다. 만약 같거나 클 때는 K만큼 공사할 수 있는지 판단하여 이동한다. 구현 - 최대 높이를 찾아서 max_value에 저장한다. - 2차원 리스트인 board를 탐색해서 max_value가 나올 때마다 dfs를 진행한다. - dfs에는 현재 위치, 방문 여부, 길이, 공사의 여부를 전달한다. N, K = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(N)] max_value = 0 for y in range(N): for x in range(..

[SWEA 2382] 미생물 격리

접근 리스트를 원소로 갖는 2차원 리스트를 생성하여 미생물들의 개수와 방향을 넣었다. 이후에 미생물이 이동할 때 새로운 2차원 리스트에 이동한 미생물들을 대입하였다. 그리고 2개 이상의 미생물들이 모였을 때 합을 구하고 제일 많은 개수를 갖는 미생물의 방향을 구하여 업데이트하였다. 구현 - 다음은 미생물들이 이동하는 것을 구현한 함수이다. - 먼저 기존의 미생물들이 들어있는 board를 탐색하여 해당 미생물을 이동시킨다. - 이동시켰을 때 약품이 칠해져있는 곳일 때는 개수를 반으로 나누고 방향을 반대로 설정한다. - 미생물의 개수가 1 이상일 때 새로운 위치에 대입한다. - 모든 미생물들의 이동이 끝난 후에 2개 이상이 모여있는 곳은 미생물들을 하나씩 꺼내어 총합을 구한다. - 이때 개수가 가장 많은 미..

[Level 3] 숫자 게임

https://programmers.co.kr/learn/courses/30/lessons/12987 코딩테스트 연습 - 숫자 게임 xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로 programmers.co.kr 접근 A와 B를 모두 오름차순으로 정렬한다. 그리고 A를 탐색하면서 해당 숫자보다 큰 것을 B에서 찾는다. 이때 idx를 사용하여 B를 탐색할 때 사용한다. 만약 A의 첫 번째 숫자보다 큰 것을 찾았다면 B를 처음부터 탐색하는 것이 아니라 큰 것을 찾은 다음 숫자부터 탐색하여 시간을 줄인다. 구현 - A와 B를 오름차순으로 정렬한다. - A의 숫자..

[SWEA 2112] 보호 필름

접근 약품을 투입할 수 있는 모든 조합을 확인했을 때 완전탐색으로 풀이가 가능하다고 생각하였다. 따라서 K가 2 이상일 때 약품을 투입하는 조합을 생성하여 해당 셀을 모두 0 또는 1로 바꾸어주었다. 그리고 모두 성능검사에 통과하는지 판단하는 함수로 전달하여 판단하였다. 이 문제는 계속 49개만 맞았다고 나왔는데 문제점을 파악하기 어려웠다. 계속 시도를 해보다가 뒤늦게 깨달았는데 나의 풀이에 문제가 있었다. 만약 3개의 막에 약품을 주입한다했을 때 해당 막의 셀들을 모두 0 또는 1로 바꾸어주었다. 하지만 이렇게하면 3개의 막 중에 2곳은 0 1곳은 1을 주입할 수도 있는 경우의 수를 놓치고 있었다. 따라서 이 부분을 해결한 후에 PASS를 받을 수 있었다. 구현 - 성능 검사에 통과할 수 있는지 판단하..

[Level 3] 단어 변환

https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 접근 dfs를 통해 현재 단어에서 1개의 글자만 다를 때 해당 단어로 다음 탐색을 진행한다. 진행하다가 target 단어가 되었을 때 지금까지의 depth가 답이된다. 구현 - 먼저 answer에는 words의 길이에 + 1로 하여 찾지 못했을 때 0을 출력하도록 한다. - picked에 지금까지 선택한 단어들을 추가한..

[Level 3] 불량 사용자

https://programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 접근 먼저 각각의 banned_id가 될 수 있는 아이디를 찾는다. 이후 불량 사용자가 될 수 있는 조합을 찾는다. 구현 - names 배열에 해당 banned_id가 될 수 있는 아이디를 담는다. - banned_id를 순차적으로 탐색하여 아이디를 찾는데 길이가 같을 때에 아이디를 비교한다. - 별표(*)가 있을 때는 아무 문자나 올 수 있기 때문에 conti..

[Level 3] 이중우선순위큐

https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 접근 힙을 이용하여 주어진 명령어대로 최댓값을 삭제하거나 최솟값을 삭제한다. 구현 - 빈 배열인 numbers를 선언한다. - 주어진 operations를 탐색하여 명령어와 숫자를 분리하고 - 명령이 I일 때는 heappush로 숫자를 numbers에 대입한다. 이를 통해 numbers는 오름차순으로 정렬될 것이다. - 명령어가 D이고 numbers가 비어있지 않을 때는 - 숫자가 1일 때 리스트 메서드인 pop으로 최댓값을 삭제하고 -1일 때는 heappop로 최솟값을 삭제한다. - 연산을 모두 완료했을 때 numbers가 비어있다면 [..

[Level 2] 행렬 테두리 회전하기

https://programmers.co.kr/learn/courses/30/lessons/77485 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr 접근 총 4방향으로 회전하기 때문에 각 방향에 대해 회전해야 하는 범위를 정하여 새로운 2차원 배열에 저장한다. 이후에 새로운 2차원 배열의 좌표에 아무 숫자도 들어있지 않았다면 기존의 숫자를 대입한다. 구현 - 아래는 좌표를 입력받아 테두리를 회전시키는 함수이다. - 각각의 4방향으로 나누고 범위를 지정하여 새로운 2차원 배열인 new_boa..

[Level 3] 보석 쇼핑

https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 접근 기본적으로 투 포인터 알고리즘을 적용하였다. left와 right가 처음에 0번째 인덱스를 가리킨다. 이제 right를 증가시키면서 해당되는 보석을 table에 추가한다. 만약 table의 길이가 보석의 종류와 같을 때는 최소 길이를 찾는다. 구현 - 먼저 set을 통해 보석 종류의 개수를 구한다. - left와 right가 0번째 인덱스를 가리키면서 탐색을 시작한다. - right가 증가하면서 table..

728x90
반응형