본문 바로가기

알고리즘66

[백준 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.
[프로그래머스 42888] 오픈채팅방 (C++) A. 문제설명 문제에 대한 자세한 설명은 링크 참조 programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 1. 카카오톡 오픈채팅방에서 사람들이 닉네임을 사용하여 대화를 한다. 2. 대화방에서 사람이 들어오거나 나가면 다음과 같은 메세지가 출력된다. "[닉네임]님이 들어왔습니다." "[닉네임]님이 나갔습니다." 3. 채팅방에서 닉네임을 변경할 수 있는데, 변경하는 방법은 아래 두가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시.. 2021. 2. 27.
[프로그래머스 64065] 튜플 (C++) A. 문제설명 문제에 대한 자세한 설명은 링크 참조 programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 1. 열거형의 특정 순서를 따르는 요소들의 모음을 튜플이라고 한다. 2. n개의 요소들을 가진 튜플을 n-튜플이라고 할 때, 아래와 같은 성질을 가진다. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2) 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서.. 2021. 2. 21.
[프로그래머스 72412] 순위 검색 (C++) A. 문제설명 문제에 대한 자세한 설명은 링크 참조 programmers.co.kr/learn/courses/30/lessons/72412 2021. 2. 16.
[프로그래머스 60057] 문자열 압축 (C++) A. 문제설명 문제에 대한 자세한 설명은 링크 참조 programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자 programmers.co.kr 1. 문자열 s가 존재 2. 문자열에서 중복 발생하는 문자들의 발생횟수를 기록하여 문자열을 압축하려 함 3. 문자열을 잘라 압축하는 단위는 1개이상 4. 문자열을 잘라 압축하는 표현 중, 가장 길이가 짧은 것을 반환 B. 접근법 문제 조건에 따라 문자열 재단이 주요한 문제. 완전 탐색으로 길이 1부터 |문자열 길이| /.. 2021. 2. 1.
[프로그래머스 64061] 크레인 인형뽑기 (C++) A. 문제설명 문제에 대한 자세한 설명은 링크 참조 programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 1. N*N 크기의 배열이 존재 2. 크레인이 각 열을 이동하며 맨 위의 인형을 뽑는다. 없는경우, 아무 행동도 하지 않음 3. 인형을 뽑아, 바구니에 쌓았을 때 같은 인형 두개가 겹치는 경우 없어짐 4. 모든 명령을 받아 수행하고, 인형을 겹쳐 없어지는 갯수를 구하라 B. 접근법 스택을 이용하여 간단하게 풀 수 있는 문제, 나는 C++ 벡터로 쉽게 .. 2021. 1. 24.
[백준 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.