이것이 코딩 테스트다 77

[이진 탐색] 이코테 (파이썬) 정렬된 배열에서 특정 수의 개수 구하기 풀이

[문제] N개의 원소를 포함하고 있는 수열이 오름차순으로 정렬되어 있습니다. 이때 이 수열에서 x가 등장하는 횟수를 계산하세요. 예를 들어 수열 {1, 1, 2, 2, 2, 2, 3}이 있을 때 x = 2라면, 현재 수열에서 값이 2인 원소가 4개이므로 4를 출력합니다. 단, 이 문제는 시간 복잡도 O(logN)으로 알고리즘을 설계하지 않으면 '시간 초과' 판정을 받습니다. [입력 조건] 1. 첫째 줄에 N과 x가 정수 형태로 공백으로 구분되어 입력됩니다. (1

[DFS/BFS] 이코테 (파이썬) 블록 이동하기 풀이

[문제] 로봇 개발자 "무지"는 한 달 앞으로 다가온 "카카오배 로봇경진대회"에 출품할 로봇을 준비하고 있습니다. 준비 중인 로봇은 2 x 1 크기의 로봇으로 무지는 "0"과 "1"로 이루어진 N x N 크기의 지도에서 2 x 1 크기인 로봇을 움직여 (N, N) 위치까지 이동 할 수 있도록 프로그래밍을 하려고 합니다. 로봇이 이동하는 지도는 가장 왼쪽, 상단의 좌표를 (1, 1)로 하며 지도 내에 표시된 숫자 0은 빈칸을, 1은 벽을 나타냅니다. 로봇은 벽이 있는 칸 또는 지도 밖으로는 이동할 수 없습니다. 로봇은 처음에 좌표 (1, 1) 위치에서 가로 방향으로 놓여 있는 상태로 시작하며, 앞뒤 구분 없이 움직일 수 있습니다. 로봇이 움직일 때는 현재 놓여 있는 상태를 유지하면서 이동합니다. 예를 들어..

[DFS/BFS] 이코테 (파이썬) 인구 이동 풀이

[문제] N x N 크기의 땅이 있고, 땅은 1 x 1개의 칸으로 나누어져 있습니다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있습니다. 인접한 나라 사이에는 국경선이 존재합니다. 모든 나라는 1 x 1 크기이기 때문에, 모든 국경선은 정사각형 형태입니다. 오늘부터 인구 이동이 시작되는 날입니다. 인구 이동은 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속됩니다. 1. 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루 동안 엽니다. 2. 위의 조건에 의해 열어야 하는 국경선이 모두 열렸다면, 인구 이동을 시작합니다. 3. 국경선이 열려 있어 인접한 칸만을 이용해 이동..

[DFS/BFS] 이코테 (파이썬) 연산자 끼워 넣기 풀이

[문제] N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어집니다. 또, 수와 수 사이에 끼워 넣을 수 있는 N-1개의 연산자가 주어집니다. 연산자는 덧셈 (+), 뺄셈 (-), 곱셈 (*), 나눗셈 (/) 으로만 이루어져 있습니다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있는데 이때 주어진 수의 순서를 바꾸면 안됩니다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(*), 나눗셈(/) 1개인 경우에는 총 60가지의 식을 만들 수 있습니다. . . . N개의 수와 N-1개의 연산자가 주어졌을 때, 만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램을 작성하세요...

[구현] 이코테 (파이썬) 좌물쇠와 열쇠 풀이

[문제] 고고학자인 튜브는 고대 유적지에서 보물과 유적이 가득할 것으로 추정되는 비밀의 문을 발견하였습니다. 그런데 문을 열려고 살펴보니 특이한 형태의 좌물쇠로 잠겨 있었고 문 앞에는 특이한 형태의 열쇠와 함께 좌물쇠를 푸는 방법에 대해 다음과 같이 설명해주는 종이가 발견되었습니다. 잠겨있는 좌물쇠는 격자 한 칸의 크기가 1 x 1인 N x N 크기의 정사각 격자 형태이고 특이한 모양의 열쇠는 M x M 크기인 정사각 격자 형태로 되어 있습니다. 좌물쇠에는 홈이 파여 있고 열쇠 또한 홈과 돌기 부분이 있습니다. 열쇠는 회전과 이동이 가능하며 열쇠의 돌기 부분을 좌물쇠의 홈 부분에 딱 맞게 채우면 좌물쇠가 열리게 되는 구조입니다. 좌물쇠 영역을 벗어난 부분에 있는 열쇠의 홈과 돌기는 좌물쇠를 여는 데 영향..

[그리디] 이코테 (파이썬) 무지의 먹방 라이브 풀이

[문제] 평소 식욕이 왕성한 무지는 자신의 재능을 뽐내고 싶어졌고 고민 끝에 카카오 TV 라이브 방송을 하기로 마음먹었습니다. 그냥 먹방을 하면 다른 방송과 차별성이 없기 때문에 무지는 다음과 같이 독특한 방식을 생각해냈습니다. 회전판에 먹어야 할 N개의 음식이 있습니다. 각 음식에는 1부터 N까지 번호가 붙어있으며, 각 음식을 섭취하는데 일정 시간이 소요됩니다. 무지는 다음과 같은 방법으로 음식을 섭취합니다. 1. 무지는 1번 음식부터 먹기 시작하여, 회전판은 번호가 증가하는 순서대로 음식을 무지 앞으로 가져다 놓습니다. 2. 마지막 번호의 음식을 섭취한 후에는 회전판에 의해 다시 1번 음식이 무지 앞으로 옵니다. 3. 무지는 음식 하나를 1초 동안 섭취한 후 남은 음식은 그대로 두고, 다음 음식을 섭..

[DFS/BFS] 이코테 (파이썬) 괄호 변환 풀이

[문제] 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다. 용어의 정의 '(' 와 ')' 로만 이루어진 문자열이 있을 경우, '('의 개수와 ')'의 개수가 같다면 이를 균형잡힌 괄호 문자열이라고 부릅니다. 그리고 여기에 '('와 ')'의 괄호의 짝도 모두 맞..

[DFS/BFS] 이코테 (파이썬) 경쟁적 전염 풀이

[문제] N x N 크기의 시험관이 있습니다. 시험관은 1 x 1 크기의 칸으로 나누어지며, 특정한 위치에는 바이러스가 존재할 수 있습니다. 바이러스의 종류는 1 ~ K번까지 K가지가 있으며 모든 바이러스는 이 중 하나에 속합니다. 시험관에 존재하는 모든 바이러스는 1초마다 상, 하, 좌, 우의 방향으로 증식하는데, 매초 번호가 낮은 종류의 바이러스부터 먼저 증식합니다. 또한 증식 과정에서 특정한 칸에 이미 어떠한 바이러스가 있다면, 그곳에는 다른 바이러스가 들어갈 수 없습니다. 시험관의 크기와 바이러스의 위치 정보가 주어졌을 때, S초가 지난 후에 (X, Y)에 존재하는 바이러스의 종류를 출력하는 프로그램을 작성하세요. 만약 S초가 지난 후에 해당 위치에 바이러스가 존재하지 않는다면, 0을 출력합니다...

[DFS/BFS] 이코테 (파이썬) 연구소 풀이

[문제] 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었습니다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 합니다. 연구소는 크기가 N x M인 직사각형으로 나타낼 수 있으며, 직사각형은 1 x 1 크기의 정사각형으로 나누어져 있습니다. 연구소는 빈칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지합니다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈칸으로 모두 퍼져나갈 수 있습니다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 합니다. . . . 벽을 3개 세운 뒤, 바이러스가 퍼질 수 없는 곳을 안전 영역이라고 할 때 위의 지도에서 안전 영역의 크기는 27입니다. 연구소의 지도가 주어졌을 때..

[DFS/BFS] 이코테 (파이썬) 특정 거리의 도시 찾기 풀이

[문제] 어떤 나라에는 1 ~ N번까지의 도시와 M개의 단방향 도로가 존재합니다. 모든 도로의 거리는 1입니다. 이때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시의 번호를 출력하는 프로그램을 작성하세요. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상 0이라고 가정합니다. 예를 들어 N = 4, K = 2, X = 1일 때 다음과 같이 그래프가 구성되어 있다고 합시다. 이때 1번 도시에서 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 2인 도시는 4번 도시뿐입니다. 2번과 3번 도시의 경우, 최단 거리가 1이기 때문에 출력하지 않습니다. [입력 조건] 1. 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시..