알고리즘 공부방
2023 부산대학교 CodeRace Open Contest 본문
https://www.acmicpc.net/contest/view/994
2023 부산대학교 CodeRace Open Contest
www.acmicpc.net
근로장학하는 중에 심심해서 한번 풀어보았다.
시간은 11시 ~ 14시까지 했고, 12시 ~ 1시 동안은 점심을 먹었다.
A - 첨탑 밀어서 부수기
단순 구현 문제였다.
현재 위치의 높이가 다음 높이의 위치보다 높은 것을 세어주면 된다.
(살짝의 실수로 5분정도 걸림)
B - 영역 색칠
그리디와 case-work느낌이 나는 문제였다.
붓을 가로방향으로만 칠할 수 있으므로, 각 행마다의 열만 체크해주면 되는데,
여기서 색깔이 칠해져있는지, 안 칠해져있는지, 칠해져있다면, 같은 색깔인지 다른 색깔인지를 판단하고,
다른 색깔이면 개수를 세어준다.
그리고 0이 나오면 cnt / 2 + 1을 결과값에 더해준다.
그리고 마지막에 0이 안 나와 마지막 값이 안 더해질 수 있으니, 마지막에 이것을 체크해주면 된다.
(생각해야할게 좀 있었어서 20분정도 걸렸다)
D - 게임을 클리어하자
2차원 DP문제였다.
dp[i-1]에서 가장 작은 값과 두번째로 작은 값을 찾으면 되는 것인데,
먼저 dp[i-1]에서 가장 작은 값을 찾고, dp[i]의 전체를 dp[i -1]의 가장 작은 값으로 초기화를 해준다.
이유는 dp[i][j]에서 dp[i - 1][j]을 제외한 값중에 가장 작은 값만 찾으면 되기 때문이다.
그리고 가장 작은 값을 뽑아낸 인덱스, 즉 dp[i][min_index]는 dp[i - 1]에서 두번째로 작은 값으로 초기화를 해준다.
그리고 dp[i][j] += arr[i][j]를 해주면 된다.
(아이디어는 바로 떠올랐는데, 처음에는 가장 작은 값을 뽑아낸 인덱스의 dp[i]를 max값으로 초기화해서 wc를 받고있었다.
이걸 해결하는데 생각보다 시간이 걸렸다. 한 25분 정도 걸렸다)
E - 시간이 겹칠까?
누적합 문제였다.
개인적으로 브론즈 문제 다음으로 제일 쉬운 문제였다.
시작시간과 끝나는 시간을 입력을 받고, arr[start]++, arr[end + 1]--를 해주면 된다.
end + 1을 빼주는 이유는 누적합을 구할 때 end 이후로는 다시 원상태로 해주어야 하기 때문이다.
그리고 누적합을 구하고, Q를 입력받을 때 arr[q]를 출력해주면 끝나는 문제였다.
(이건 보자마자 풀었다. 5분 컷했다)
c번 이후는 자력솔은 불가능할거 같아 더 공부하고 풀어봐야 할 것같다.
'알고리즘' 카테고리의 다른 글
2023 SCON OpenContest (1) | 2023.06.09 |
---|---|
백준 2981 검문(C++) (0) | 2023.05.19 |
보드게임 컵 (1) | 2023.01.17 |
백준 1520 내리막 길(JAVA) (0) | 2022.12.28 |
Solved Platinum V 달성 (0) | 2022.12.28 |