본문 바로가기

Algorithm/Baekjoon117

2212. 센서 (Python) 2212번: 센서 첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있 www.acmicpc.net 풀이 먼저 입력 받은 센서의 좌표들을 오름차순으로 정렬한다. 그리고나서 각 센서들간의 거리를 구해서 새로운 리스트에 담는다. 예를 들어 예제의 입력에서 1, 6, 9, 3, 6, 7을 1, 3, 6, 6, 7, 9로 정렬한다. 그 후 각각의 거리를 구하면 다음과 같다. 이렇게 구한 거리를 내림차순으로 정렬하면 3, 2, 2, 1, 0이 된다. 이제 앞에서부터 집중국의 개수(K) - 1만큼을 버리면 된다. 가장 멀리 떨어져 있는 센서끼리는.. 2022. 2. 23.
17144. 미세먼지 안녕 (Python) 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 풀이 단순한 구현 문제로 문제에서 주어진 순서대로 코드를 작성하면 된다. 미세먼지가 확산하는 과정을 diffuse() 함수로 만들었고 공기청정기가 작동하는 과정을 cleanAir() 함수로 만들었다. 미세먼지가 있는 좌표를 담아두는 리스트를 만들어서 (행, 열, 미세먼지 수치)와 같은 형태의 튜플로 담아두었다. 이 리스트를 통해서 diffuse() 함수에서 미세먼지를 확산시킨다. cleanAir()에서는 공기청정기가 작동하는 반대방향 순으로 for문을 통해서 각.. 2022. 2. 19.
13975. 파일 합치기 3 (Python) 13975번: 파일 합치기 3 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데, www.acmicpc.net 풀이 파일들을 하나의 파일로 합칠 때의 비용을 계산하기 위한 연산의 횟수는 K-1번이다. 이 때, 최소비용을 구하기 위해서는 각 연산마다 파일 중 제일 작은 값들을 사용해야 다음 연산에 사용할 값을 작은 값으로 만들 수 있다. 최소 힙을 사용하여 두 개의 파일을 선택할 때 현재 파일 목록 중 가장 작은 값을 꺼내오도록 한다. 두 값을 합친 후 다시 최소 힙에 넣어주는 과정을 K-1번 반복한다. 코드 import heapq def solution(nums): a.. 2022. 2. 18.
1300. K번째 수 (Swift, Python) 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 풀이 이분탐색을 활용해서 해결할 수 있다. B 배열에서 K번째에 있는 수의 범위는 1 이상 K 이하의 수이다. left를 1로 잡고 right를 K로 잡아서 이분 탐색을 진행하면 된다. mid를 구해서 해당 mid 이하인 원소 개수가 A 배열에서 몇 개인지를 구하면 된다. 예를 들어 현재 mid가 13이고 N이 4라고 가정해보자. A 배열에 13 이하인 원소의 개수는 1부터 N(4에 해당)까지 for문을 통해 구할 수 있다. 1행에.. 2022. 2. 14.
18428. 감시 피하기 (Python) 18428번: 감시 피하기 NxN 크기의 복도가 있다. 복도는 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복 www.acmicpc.net 풀이 리스트에 X의 위치를 담아두고 이를 조합을 사용하여 3개의 위치를 뽑아낸다. 조합으로 뽑아낸 3개의 위치에 장애물을 설치하고 선생님들의 위치에서 상하좌우를 봤을 때 학생을 볼 수 있는지를 체크한다. 코드 from itertools import combinations # 범위 체크 함수 def isRange(x, y): return 0 2022. 2. 12.
14940. 쉬운 최단거리 (Python) 14940번: 쉬운 최단거리 지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이 www.acmicpc.net 풀이 목표지점(2)의 위치를 구해서 해당 위치에서부터 bfs로 탐색을 하면 된다. 정답을 담아주는 배열의 초기 값에는 지도의 값이 1인 좌표에는 -1을 넣어주고 0인 좌표에는 0을 넣어준다. bfs 탐색을 하며 해당 좌표에 도착하는 거리를 정답 배열에 넣어주면 된다. 코드 from collections import deque # 범위 탐색을 위한 함수 def isRange(x, y): return 0 2022. 2. 11.