구현(3)
-
[백준] 14653 너의 이름은 (실버 2)
실버 2지만 반례를 찾아내기 개인적으로 굉장히 어려웠다. 큰 구성은 아래와 같다. -> 메세지를 읽지 않은 사람들을 담은 집합을 만든다. (초기화는 A를 제외한 모든 사람으로 해준다.) -> 톡 내용을 아래서 위로 훑으며 -> 송신자는 확실히 읽은 사람이기 때문에 집합에서 제거해준다. -> 읽은 사람 수가 0명이라면 모든 사람이 읽은 것으로 생각한다. 이렇게 하면 간단히 문제가 풀릴 것이라고 생각했지만, 나로써는 생각하기 어려운 반례 상황이 존재했다. 4 2 2 2 B 3 A 4 2 2 2 B 2 A 여기서 두 입력의 차이를 고려해주어야 "맞았습니다"를 받을 수 있다. 현재 초기화된 사람들 집합은 { B, C, D }이다. 톡 내용을 아래부터 훑으며 올..
2023.05.26 -
[백준] 20187 종이접기 (골드 3)
별로 어렵지 않은 구현문제였는데 아이디어를 떠올리는 데 시간이 조금 걸렸습니다. 종이를 R, U, D, L 방향으로 접는데 k번 접고 난 이후에는 변의 길이가 1인 정사각형이 남아있어야 하므로 좌우 방향 접는 횟수와 상하 방향 접는 횟수가 동일하다는 조건이 문제에 주어져 있습니다. 문제를 푸는 키 아이디어는 결과적으로 반복된다는 것입니다. 2*2 정사각형의 상하좌우의 뚫린 구멍이 모두 결정되고 나면 그러한 정사각형이 반복되는 구조입니다. 그러한 구조는 잘 생각해본다면 가장 마지막으로 접은 좌우 방향, 그리고 상하 방향으로 결정됩니다. 그리고 그 정보를 통해 우리는 2*2 정사각형의 구멍을 채울 수 있습니다. 예를 들어, R L L D U L R D D U 으로 접는다면, 가장 마지막으로 접은 좌우방향은 ..
2023.05.13 -
[백준] 2251 물통 (골드 5)
물통의 상태를 매번 큐에 넣어주면서 이전에 도달하지 못했던 상태면 큐에 삽입해주고 방문처리를 하는 방식으로 진행했다. 미로찾기와 같은 형태의 상황만 bfs를 사용하는 것이 아니라, 현재의 상태에서 다음 상태로 연결되는 상황이기만 한다면 bfs를 떠올려보아야 한다. visited 는 (A, B, C)에 들어있는 물의 양의 튜플이 들어가는 set으로 정의했는데, 문제를 다 풀고 생각해보니, 물의 총량은 일정하기 때문에 3개의 물통 중 2개의 물통에 들어있는 양만 저장하면 된다. 즉, visited를 200*200의 2차원 배열로 만들었어도 충분히 가능했다는 말이다. 시간복잡도 측면에서 약간 이득이 될 것 같다. from collections import deque import sys input = sys.s..
2023.03.22