Codeforces Round #835 (Div. 4)
하나하나 보는것보다 한번에 리뷰하는게 편리하다는것을 알게되었다. 코드는 깃허브에서 보도록 하자
https://codeforces.com/contest/1760
A (00:01)
https://github.com/sjmjys954646/Algorithm/blob/master/CodeforcesRound835_Div4_A_MediumNumber.cpp
중간 값을 출력하라
3개 다 입력받고 정렬해서 중간값을 냈다.
다른 풀이들 중 인상깊은건
tourist - 입력받을때마다 스왑 스왑 해서 중앙값 바로출력
ssrs - 다 더해서 가장 적은값(min) 가장 큰값 (max) 빼기
B (00:06)
알파벳중 가장 순서가 가장 높은 값 알파벳을 숫자로 출력
ex) codeforces -> s (19)
zzzzz -> z (26)
입력받고 방문처리로 가장 큰거 찾아줬는데 지금 생각해보니 왜 이렇게 했는지 모르겠다.
그냥 string for문 돌면서 max()만 취해줘도 됬을듯하다.
C (00:12)
https://github.com/sjmjys954646/Algorithm/blob/master/CodeforcesRound835_Div4_C_Advantage.cpp
문제 읽어보면 가장 큰수는 두번째 큰수를 빼고
나머지는 가장큰수를 빼준다.
구현하기
D (00:44)
이건 문제를 이해하는데 너무 오래걸렸다.
사실 지금도 문제가 이해가 안간다.
Valley를 찾으라는데 Valley구성하는 조건이 단 하나만 존재해야한다.
그래서 전체가 다 감소
전체가 다 증가
감소했다가 증가가 단 한번
이 3가지 경우를 체크해서 풀었다.
E (01:12)
https://github.com/sjmjys954646/Algorithm/blob/master/CodeforcesRound835_Div4_E_BinaryInversions.cpp
이 문제가 오히려 D번 보다 조금 걸렸다.
1이 나오면 이후에 나올 모든 0의 개수만큼 점수를 얻는다.
단 한번, 0을 1 또는 1을 0으로 바꿀 수 있을 때, 이것의 최대값을 구하여라 인데,
가장 앞의 0을 1로 만들거나
가장 뒤의 1을 0으로 만들어야 최대값이 증가할 것이다.
따라서, 원상태, 0->1, 1->0 세가지 경우를 돌면서 최대값을 갱신해주면 답이된다.
게다가 prefix sum을 이용해서 최적화를 해주었다.
이후에 너무 잠와가지고 1시간 남기고 자버렸다..
후기)
5문제 풀긴했는데.. 점수가 조금오른다 div4는 6솔 또는 올솔브를 해야될것같다.