Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

알고리즘 공부방

2023 부산대학교 CodeRace Open Contest 본문

알고리즘

2023 부산대학교 CodeRace Open Contest

head89 2023. 5. 12. 15:04

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