목록algorithms/백준 (9)
yuns
이 문제는 예시랑 내가 짠 코드가 정확히 일치하지 않아서 로직이 잘못 된 줄 알고 계속 고민하느라 오랜 시간이 소요됐다. 문제 https://www.acmicpc.net/problem/1379 1379번: 강의실 2 첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의 www.acmicpc.net 코드 arr에는 시작 시간 기준으로 sorting을 하고, heapq에는 끝나는 시간 기준으로 우선순위 큐 정렬하기 from heapq import heappush, heappop pq = [] n = int(input()) room = [0] * n a..

문제: https://www.acmicpc.net/problem/20419 입력 r, c = 가로, 세로 길이 k = 0, 1(0이면 주문서 없음, 1이면 주문서 있음) 아이디어 k = 0 일때는 도착 할 수 있는지 간단하게 확인하기 k = 1일 때는, visited의 크기를 r x c x 4와 같이 정의 한 뒤, 마지막의 위치를 k라 할 때, ( 0: 한 개도 안 씀, 1: 오른쪽 하나 씀, 2: 왼쪽 하나 씀, 3: 왼, 오른 다 씀 ) 오른쪽을 한 번도 안 쓸 경우, 해당 값을 queue에 넣기 왼쪽을 한번도 안 쓸 경우, 해당 값을 queue에 넣기 code from collections import deque r, c, k = map(int, input().split()) dxy = [[-1, ..

문제 링크 어항 정리 문제 요약 물고기가 가장 적은 어항에 물고기 한 마리씨 구착 달팽이 모양으로 계속 쌓일 때까지 말아주기 어항 내 물고기 수 조절 인접한 두 어항의 개체수 차이가 5이상일 경우, 5로 나눈 몫의 수만큼 물고기 이동 세로로 어항이 쌓였을 경우 아래가 제일 왼쪽에 오도록 순서 배치 공중부양 작업 어항 내 물고기 수 조절 물고기의 최대와 최소의 차이가 k개이하가 될 때까지 1-6반복 아이디어 정리 문제 풀이 아이디어 정리에 사용한 대로 코드 작성 n, k = map(int, input().split()) fish = list(map(int, input().split())) def fill_fish(): min_fish = min(fish) for i in range(n): if fish[i..

문제 링크 https://www.acmicpc.net/problem/19238 문제 요약 및 아이디 어 정리 택시의 현 시점에서 고객의 위치 거리 계산 후, [거리, 행, 열] 순으로 가장 짧은 위치에 있는 고객에게 이동 가는 동안 연료가 떨어질 경우 -1 출력 고객의 위치에서 도착지까지 이동할 경우 가는 동안 연료가 떨어질 경우 -1 출력 아닐 경우, 이동 거리만큼 연료를 감소시키고, 고객이 내린 뒤에는 연료만큼 증가 모든 고객이 다 이동할 경우 남은 연료의 양 출력 아닐 경우 -1 출력 문제 풀이 아이디어 정리에 사용한 대로 코드 작성 from collections import deque n, m, k = map(int, input().split()) maps = [list(map(int, input..

문제 링크 https://www.acmicpc.net/problem/23288 문제 요약 초기화 단계에서, 정답에 더해지는 값을 미리 저장해놓는 score판을 필요로 한다. 아이디어 정리 더해지는 점수는 연결 되어 있는 지도 위의 값들의 수이기 때문에 처음에 최초로 score의 배열을 만들어둔다. 주사위의 이동 방향은 아래의 모듈러 연산은 이용하여 계산한다. def decide_direction(dice_num, map_num): global direction if dice_num > map_num: direction = (direction + 1) % 4 elif dice_num < map_num: direction = (direction + 3) % 4 문제 풀이 아이디어 정리에 사용한 대로 코드 작..

문제 링크 https://www.acmicpc.net/problem/23289 문제 요약 지도위에 있는 숫자가 0일 경우와 아닐 경우 각각 다르게 지도와 주사위를 업데이트 해준다 지도위에 있는 숫자가 0일 경우 주사위 바닥면을 지도 위에 복사 지도위에 있는 숫자가 0이 아닐 경우 주사위 바닥면을 지도위의 숫자로 바꾼 뒤, 지도위의 숫자를 0으로 세팅 아이디어 정리 아래 과정이 필요 동, 서, 북, 남을 옮길 때 주사위 위치를 dxy로 선언해준다. 주사위의 list을 문제에서 주어진 1-6의 위치를 순으로 나열한다. 방향에 따라 돌아가는 주사위를 고려하여 주사위의 순서를 바꿔준다. 문제에서 주사위를 굴린 뒤, 나온 지도위의 숫자에 따라 주사위와 지도의 값을 바꿔준다. 문제 풀이 아이디어 정리에 사용한 대로..

문제 링크 https://www.acmicpc.net/problem/21609 문제 요약 아이디어 정리 다음과 같은 순서대로 동작한다. 가장 넓은 범위를 가지는 블록을 선택해야 한다. bfs을 이용할 것이며, visited를 이용하여 방문한 경우를 제외하고 탐색한다. 여기서 rainbow에 해당하는 경우는 visited하지 않았다고 해서 다른 탐색을 할 때, 해당 영역도 포함하여 탐색이 가능하도록 해야 한다. 가장 넓은 범위를 가지는 블록의 값을 의미 없는 값인 -2로 설정한다. 중력과 회전하는 코드를 입력 위의 방법을 블록이 없을 때까지 반복한다. 문제 풀이 아이디어 정리에 사용한 대로 코드 작성 from collections import deque n, m = map(int, input().split..

문제 링크 https://www.acmicpc.net/problem/21610 문제 요약 구름이 이동함에 따라 지역마다 물의 양이 감소 혹은 증가함 아이디어 정리 아래 과정이 필요 이동한 구름의 위치 파악 한 뒤, 물의 양을 증가시킨다. 여기서 배열의 범위를 넘어갈 경우 반대쪽으로 넘어서 돌아오는 것을 고려해야함 물이 증가한 위치에서 대각선 방향에 있는 물이 있는 지역을 기준으로 물의 양을 증가시킴 1번 과정과 달리 범위를 넘어갈 경우 없다고 판단 새로운 구름의 위치를 알아내는 과정 전체 지역에서 구름의 위치가 기존 구름과 겹치지 않도록 하면서 2이상인 지역으로 추가 문제 풀이 n, m = map(int, input().split()) maps = [] for _ in range(n): maps.appe..