본문 바로가기

알고리즘/백준56

[백준 14427] 수열과 쿼리 15(C++: Updatable PQ) A. 문제설명 https://www.acmicpc.net/problem/14427 14427번: 수열과 쿼리 15 길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 i v : Ai를 v로 바꾼다. (1 ≤ i ≤ N, 1 ≤ v ≤ 109) 2 : 수열에서 크기가 가장 작은 값의 인덱스를 www.acmicpc.net 문제 설명은 다음과 같다. 길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 i v : Ai를 v로 바꾼다. (1 ≤ i ≤ N, 1 ≤ v ≤ 109) 2 : 수열에서 크기가 가장 작은 값의 인덱스를 출력한다. 그러한 값이 여러 개인 경우에는 인덱스가 작은 것을 .. 2021. 12. 10.
[백준 1939] 중량제한 (C++) A. 문제설명 www.acmicpc.net/problem/1939 1939번: 중량제한 첫째 줄에 N, M(1≤M≤100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1≤A, B≤N), C(1≤C≤1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 C인 다리 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N(2≤N≤10,000)개의 섬으로 이루어진 나라가 있음 2. 이들 사이에는 M(1≤M≤100,000)개의 다리가 설치되어 차들이 다닐 수 있음 3. 그러나 다리에는 각각 중량제한이 있어 이를 넘는 차량은 다닐 수 없음 4. 섬들과 다리의 중량제한 정보가 주어졌을 때, 출발지에서 목적지로 한 번의 이동에서 .. 2021. 4. 18.
[백준 3079] 입국심사 (C++) A. 문제설명 www.acmicpc.net/problem/3079 3079번: 입국심사 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109) www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 상근이와 친구들이 입국심사를 받음 2. 총 인원은 M명, 입국심사대는 N개 주어짐 3. 한 심사대에서는 한번에 한명씩 심사가 가능하며, 각 심사대는 심사소요 시간이 각각 다름 4. 각 인원별 심사 소요시간을 최소로 하여 총 심사 소요시간 중 최소가 되는 것을 구하라 B. 접근법 이분 탐색 먼저 문제의 조건을 확인하면, 주어진 메모리 제약과 .. 2021. 4. 13.
[백준 1525] 퍼즐 (C++) A. 문제설명 www.acmicpc.net/problem/1525 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 3*3 퍼즐에 다음과 같이 수가 채워짐 1 2 3 4 5 6 7 8 2. 1~8까지 수가 주어지고 한 칸은 빈칸 3. 퍼즐의 초기 모양이 주어졌을 때, 위와 같이 정리된 상태를 만들기 위해 걸리는 이동 횟수를 구하라 B. 접근법 BFS + Map 자료구조 처음에 문제를 받아서 들었을 때, 퍼즐의 모양을 기록하여 BFS 탐사하는 방법을 생각하여 구현하였다. 하지만, 이 문제에서 주어진 메모리 제한은 32MB. 좀 더 효율적인 방법이 .. 2021. 4. 6.
[백준 9328] 열쇠 (C++) A. 문제설명 www.acmicpc.net/problem/9328 9328번: 열쇠 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 상근이는 빌딩에 침입해 문서를 훔치려고 함 2. 빌딩에는 문이 있고, 문을 열려면 해당 알파벳의 열쇠가 필요함 3. 열쇠는 주어지기도 하고, 주워서 얻을 수도 있음 4. 빌딩의 각 공간은 아래와 같은 규칙을 가짐 '.'는 빈 공간을 나타낸다. '*'는 벽을 나타내며, 상근이는 벽을 통과할 수 없다. '$'는 상근이가 훔쳐야하는 문서이다. 알파벳 대문자는 문을 나타낸다.. 2021. 3. 25.
[백준 1726] 로봇 (C++) A. 문제설명 www.acmicpc.net/problem/1726 1726번: 로봇 많은 공장에서 로봇이 이용되고 있다. 우리 월드 공장의 로봇은 바라보는 방향으로 궤도를 따라 움직이며, 움직이는 방향은 동, 서, 남, 북 가운데 하나이다. 로봇의 이동을 제어하는 명령어는 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 로봇이 궤도를 따라 움직이며 시작점에서 목적지로 이동 2. 로봇은 각각 한번의 명령마다 아래와 같이 이동할 수 있음 명령 1. Go k: k는 1, 2 또는 3일 수 있다. 현재 향하고 있는 방향으로 k칸 만큼 움직인다. 명령 2. Turn dir: dir은 left 또는 right 이며, 각각 왼쪽 또는 오른쪽으로 90° 회전한다. 3. 로봇의 현재 위치와 바라보.. 2021. 3. 23.
[백준 20056] 마법사 상어와 파이어볼 (C++) A. 문제설명 www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*N 크기의 배열에서 마법사 상어가 파이어볼을 발사 2. 각 파이어볼은 위치(r,c), 질량 m, 방향 d, 속력 s가 주어짐 3. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있음 4. 파이어볼의 방향은 인접 8방향으로 이루어짐 5. 마.. 2021. 3. 11.
[백준 20055] 컨베이어 벨트 위의 로봇 (C++) A. 문제설명 www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 다음과 같은 형태의 컨베이어 벨트가 존재 2. 벨트는 1~2N의 위치로 시계방향으로 회전하며, 1번 위치에서 로봇이 탑승, N번 위치에서 로봇이 하차함 3. 컨베이어 벨트를 이용해 로봇을 한쪽에서 반대편으로 옮기려고 하는데, 다음의 규칙에 따라 이동함 1. 벨트가 한 칸 회전한다. 2. 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전.. 2021. 3. 9.
[백준 16918] 봄버맨 (C++) A. 문제설명 www.acmicpc.net/problem/16918 16918번: 봄버맨 첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다. www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. C*R 크기의 배열이 존재 2. 봄버맨이 해당 배열안에 폭탄을 설치하는 데 그 규칙은 다음과 같다. ㆍ가장 처음에 봄버맨은 일부 칸에 폭탄을 설치해 놓는다. 모든 폭탄이 설치된 시간은 같다. ㆍ다음 1초 동안 봄버맨은 아무것도 하지 않는다. ㆍ다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다. 즉, 모든 칸은 폭탄을 가지고 있게 된다. 폭탄은 모두 동시.. 2021. 1. 17.
[백준 1194] 달이 차오른다, 가자. (C++) A. 문제설명 www.acmicpc.net/problem/1194 1194번: 달이 차오른다, 가자. 첫째 줄에 미로의 세로 크기 N과 가로 크기 M이 주어진다. (1 ≤ N, M ≤ 50) 둘째 줄부터 N개의 줄에 미로의 모양이 주어진다. 같은 타입의 열쇠가 여러 개 있을 수 있고, 문도 마찬가지이다. 그리고, www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*M 미로가 존재 2. 해당 미로의 각 엔트리에는 다음과 같은 규칙이 적용됨 빈 곳 : 언제나 이동할 수 있다. ('.‘로 표시됨) 벽 : 절대 이동할 수 없다. (‘#’) 열쇠 : 언제나 이동할 수 있다. 이 곳에 처음 들어가면 열쇠를 집는다. (a - f) 문 : 대응하는 열쇠가 있을 때만 이동할 수 있다. (A - F.. 2020. 10. 31.
[백준 2638] 치즈 (C++) A. 문제설명 www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5≤N, M≤100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 표 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 위 그림과 같은 N*M 땅이 존재 2. 땅의 검은 부분에는 치즈가 존재, 흰 부분에는 공기가 존재 3. 치즈는 상/하/좌/우로 2면이상 공기와 맞닿으면 1초이후 사라짐 4. 그러나 치즈에 둘러쌓인 공기부분은 치즈에 영향을 주지 않음 5. 치즈는 배열의 가장자리에는 존재하지 않는다고 할 때, 치즈가 땅에서 없어지기까지의 총 시간을 구하라 B. 접근.. 2020. 10. 21.
[백준 2468] 안전 영역 (C++) A. 문제설명 www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 � www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*N 크기의 땅이 존재 2. 각 땅에는 높이 값이 주어지고, 이제 해당 지역에 비를 뿌리려고 함 3. 비가 내릴 때, 다음과 같이 특정 높이 이하의 지역들은 물에 잠기는데 이때 물에 잠기지 않은 인접한 지역들을 모아 안전 영역이라고 함 4. 강수량에 따라 특정 높이로 물에 잠기는 지역이 달라질 수 있을 때 최대가 되는 안전 영역의 갯수를 구하라.. 2020. 10. 16.
[백준 9019] DSLR (C++) A. 문제설명 www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 � www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. D/S/R/L 4개의 명령을 수행하는 레지스터가 존재 2. 각 명령에 대한 설명은 아래와 같음 D: D 는 n을 두 배로 바꾼다. 결과 값이 9999 보다 큰 경우에는 10000 으로 나눈 나머지를 취한다. 그 결과 값(2n mod 10000)을 레지스터에 저장한다. S: S 는 n에서 1 을 뺀 결과 n-1을 레지스터에 저장한다. n이 .. 2020. 10. 16.
[백준 6087] 레이저 통신 (C++) A. 문제설명 www.acmicpc.net/problem/6087 6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. W*H 크기의 배열이 주어짐 2. 각 배열은 빈칸 '.' 혹은 벽 '*' 으로 이루어짐 3. 여기서 'C'로 표시되는 두 칸이 주어짐 4. 아래 그림과 같이 이 두칸을 레이저로 통신할 수 있게 잇고자 하는데 중간에 거울을 놓아 레이저의 이동방향을 90도 회전할 수 있게 함 7 . . . . . . . 7 . . . . . . . 6 . . . ... 2020. 10. 16.
[백준 1600] 말이 되고픈 원숭이 (C++) A. 문제설명 www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있�� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. H*W 크기의 배열이 주어짐 2. 원숭이는 0,0의 위치에서 H,W의 위치로 이동하고자 함 3. 원숭이는 기본적으로 상하좌우 인접한 칸으로 이동이 가능하나 아래와 같은 말의 이동을 따라하려 함 x x x x 말 x x x x 4. 말의 이동동선은 다음과 같은데, 원숭이는 해당 이동을 K번 따라할 수 있음 5. 말의 이동방법과 원숭이의 .. 2020. 10. 12.