-
[백준] 2023 인하대학교 프로그래밍 경진대회(IUPC) Open Contest 후기PS/대회 2023. 8. 27. 16:05
https://www.acmicpc.net/contest/view/987
2023 인하대학교 프로그래밍 경진대회(IUPC) Open Contest
사용 가능한 언어 C++17 Java 8 Python 3 C11 PyPy3 C99 C++98 C++11 C++14 Java 8 (OpenJDK) Java 11 C++20
www.acmicpc.net
[문제 풀이]
A번. 모비스
https://www.acmicpc.net/problem/2807428074번: 모비스
주어진 문자열에 포함된 알파벳 대문자들을 이용해 MOBIS를 만들 수 있으면 "YES", 그렇지 않으면 "NO"를 출력한다.
www.acmicpc.net
단순 구현. M, O, B, I, S가 들어있는지만 확인해주자.
B번. 스파이https://www.acmicpc.net/problem/28075
28075번: 스파이
첫째 줄에는 민겸이가 임무를 수행하는 총 일수 $N$과 민겸이가 얻고 싶은 최소 기여도 $M$이 공백으로 구분되어 주어진다. 둘째 줄에 민겸이가 정보 수집 임무를 수족관, 시청, 학교에서 수행했
www.acmicpc.net
하루에 할 수 있는 일이 총 6가지 종류이므로, 모든 경우의 수는 $6^N$이다. 이때 $N$이 8이하의 수이므로 완전탐색으로 문제를 해결할 수 있다. 같은 장소에서 임무를 연속으로 할 경우 절반의 진척도를 얻음에 유의하며 구현해야 한다.
C번. 멀티탭 충분하다
https://www.acmicpc.net/problem/28076
28076번: 멀티탭 충분하다
역사와 전통의 인하대학교 PS소모임 CTP는 스터디를 위해 멀티탭 세팅을 수없이 하여, 이제 멀티탭을 가지고 놀 정도의 수준이 되었다. 말 그대로 가지고 놀고 있는데, 2구부터 108구까지 다양한
www.acmicpc.net
( 준비 중 )
E번. 중력 큐https://www.acmicpc.net/problem/28078
28078번: 중력 큐
처음에 왼쪽이 큐의 뒤, 오른쪽이 큐의 앞인 가로 방향의 빈 큐가 존재한다. 이 큐에서 공이나 가림막을 하나씩 큐의 뒤에 삽입하거나, 큐의 가장 앞에 있는 공이나 가림막을 꺼낼 수 있으며, 큐
www.acmicpc.net
다른 것보다도 구현이 난관인 문제. 차례대로 케이스를 나누어보면..
큐의 앞이 어디를 보고 있느냐를 저장하는 변수 type을 만든다. 큐의 앞이 오른쪽, 아래쪽, 왼쪽, 위쪽을 바라보고 있을 때의 상황에 대하여 각각의 type 값을 0, 1, 2, 3이라고 지정하자.
우선 삽입. 가림막은 그냥 집어넣으면 되므로 신경써야 할 것은 공이다. 공이 떨어질 수 있는 경우는 type이 1이거나 3인 경우이다.- type이 1인 경우 : 아래쪽에 가림막이 있어야 공을 삽입할 수 있다. 만약 없다면, 애초에 큐는 텅 비어있었을 것이기 때문에, 중력큐가 비어있으면 공은 그대로 떨어지고 그렇지 않다면 공을 삽입할 수 있다.
- type이 3인 경우 : 공을 삽입하자마자 떨어질 수 밖에 없다.
다음으로 회전. 역시 회전한 결과의 type이 1이거나 3인 경우를 신경쓰자. 두 경우 모두 아래쪽부터 위쪽으로 훑으면서 가림막이 나올 때까지(또는 중력큐가 빌 때까지) 공을 빼내면 된다. 물론 중력큐의 앞뒤 방향에 주의하여야 한다.
마지막으로 pop. type이 1이거나 3인 상태에서 가림막을 빼낸 경우만 신경쓰면 된다. 가림막이 빠졌을 때의 판정은 회전의 경우와 비슷하게 처리하면 된다.
차분히 생각해보면 신경써야 할 케이스는 몇 가지 안 나온다. 단지 조금 귀찮을 뿐..H번. 직사각형 피자
https://www.acmicpc.net/problem/28081
28081번: 직사각형 피자
첫 번째 줄에 피자의 가로 길이 $W$와 세로 길이 $H$, 부원들이 먹을 수 있는 피자 조각의 최대 크기 $K$가 공백으로 구분되어 주어진다. 두 번째 줄에 가로 방향 커팅의 개수 $N$이 주어진다. 세 번
www.acmicpc.net
가로 방향, 세로 방향의 커팅에 대하여 나누어진 피자의 $x$좌표 길이와 $y$좌표 길이를 따로 구분하여 놓자. 예제의 $x$좌표 길이 묶음은 {1, 4, 2}, $y$좌표 길이 묶음은 {2, 3}이 된다.
커팅 개수 $N$, $M$이 100 000 이하이므로 단순하게 풀면 $O(NM)$이라 시간 초과가 난다. 모든 쌍을 보지 않고, 피자 크기가 $K$ 이하가 될 수 있는 쌍만 탐색해보도록 한다. $x$ 좌표든 $y$ 좌표든 어느 한 좌표 길이 묶음을 기준으로, 다른 좌표 길이 묶음에서 이분탐색을 돌린다.
구체적으로, $x$좌표 길이 묶음에서의 어떤 값 $a$에 대하여, $y$좌표 길이 묶음에서의 $k/a$ 초과인 값의 인덱스를 $i$라고 하자. 조건을 만족하는 피자 조각 개수는 $i$개이다. ( $0 \leq i$ )
J번. 마왕의 성https://www.acmicpc.net/problem/28083
28083번: 마왕의 성
세계 정복의 야망을 품은 마왕은 자신의 국가를 만들기로 했다! 하지만 국가를 만들기 전, 영토를 정하거나 성을 세우는 등 해야 할 일이 많다. 영토가 될 수 있는 부지는 \(N \times M\)크기의 직사
www.acmicpc.net
스코어보드 따라가다 보니 플레 문제를 풀게 되었다. 난이도 공개됐을 때 기분은 좋았는데, 나머지 골드를 못 풀어서 한편으로는 또 찝찝하기도 하고..
모든 칸에 대하여 걷을 수 있는 최대의 세금을 구해야 하므로, 단순한 방법으로는 $O(N^2M^2)$이라 시간초과가 난다. 각 칸의 답을 구해나가는 순서를 강제하면 시간복잡도를 줄일 수 있다. 땅의 높이가 낮은 칸부터 높은 칸 순으로 탐색해나가면, 그 칸이 지금까지의 탐색 칸들 중 가장 높은 칸이므로 답을 쉽게 구할 수 있다. 상하좌우로 현재 탐색하는 칸보다 낮은 칸이 있다면 그 칸과 현재 칸을 묶어주자. 이렇게 묶인 칸들은 항상 다음 탐색하는 칸의 높이보다 낮거나 같으므로 마왕 성의 위치 조건이 항상 성립할 수 있게 된다. 무언가를 하나의 그룹으로 묶는 데는 주로 Union-Find(유니온-파인드)를 사용하므로 이 문제에서도 이를 사용하면 된다.
아이디어가 크게 어렵다는 생각은 들지 않는데, 그에 따라오는 구현이 조금 힘들다. 2차원 Union-Find(유니온-파인드)를 처음 구현해봤는데, 손도 꼬이고 뇌도 꼬이는 기분이었다. 특히 땅뿐만 아니라 세금까지도 같이 묶어줘야 하기 때문에..
[업솔빙]
(추후 추가 예정)
'PS > 대회' 카테고리의 다른 글
solved.ac Grand Arena Party — Division 2 · Arena #18 후기 (2) 2024.02.06 [백준] 제3회 숙명여자대학교 프로그래밍 경진대회 (SMUPC) Open Contest 후기 (0) 2023.09.10 [SCPC] SCPC 2023 Round 1 후기 (0) 2023.08.10 [백준] 2023 SCON Open Contest 후기 (1) 2023.05.27 [백준] 2023 KAIST RUN Spring Open Contest 후기 (1) 2023.05.20