대회/코드포스

#667 div3 9/5

xkdlaldfjtnl 2020. 9. 5. 11:57

일단 엄청 오랜만에 알고리즘 문제를 집중해서 푼 것 같다. 아마도 저번 신촌연합대회 이후로 처음

디스코드에 신촌연합끼리 코드포스하는 방이 생겨나서 그 전보다 더 집중할 수 있었던 것 같다.

 

A solve

그냥 단순하게 두 수의 차를 10으로 나눈 몫을 계산하면 된다. 

하지만 두 수가 나누어 떨어질때만 주의해서 계산한다. 구현도 쉽고 발상도 쉬웠다. 

그래서 해석이 되자마자 푼 것 같다.

 

 

B 1TLE solve

두 수를 뺄 수 있는 만큼 뺀 뒤에 최소의 곱을 만들어야 하는데, 

(a-1)b 와 a(b-1)을 비교하면 결국 a,b의 크기에 따라서 어떤 한 수를 뺐을 때의 곱 크기도 정해진다는 것을 

알 수 있다. 작은 거를 최대한 뺀다. 

 

여기서 좀 꼬였었는데, 처음에는 하나하나 빼서 비교하는 식으로 구현하려고 했다. 그러다 보니깐 

에외처리도 많았고, 생각이 꼬이고, 구현도 힘들었다 

 

그래도 작성 후 제출 하였는데 TLE. 

 

그래서 가장 중요한게 무엇일까 생각을 계속 하다가 두 수에서 모두 최대로 줄일 수 있는 크기를 구했다.

최대로 줄일 수 있는 크기를 구한 뒤에 더 작은 수를 먼저 줄이고 나머지 수를 줄였다. 

 

제일 오래 헤맨 문제...

 

C solve

수 두 개가 주어지고, n개로 구성된 등차수열을 만든다. 이때 최대 크기가 가장 작아지게 만드는데,

 

가장 중요한건  등차를 구하는 것이었다. 가장 작아지게 만드려면 등차가 가장 작아야 했으므로 가능한 가장 큰 등차부터 계산을 하였다. 

 

구현이 살짝 꼬이기는 했는데, 등차를 구하고 나서 사이 값들을 while로 구하고 출력하는 곳에서 무한루프가 돌면서 꼬였었다. 구현이 왜 이 모양이지 

 

아무튼 구현도 어렵지는 않았다.

 

D X

30분 정도 남아서 그리고 문제 길이도 짧아서 자신있었지만,

문제가 무슨 소리인지 몰랐다. digits의 해석을 수라고는 해석을 하였지만 계속 머릿속에서는 정수라고 인식을 해서 자리마다 수가 있다는 사실을 인지하지 못 햇다. 

 

그래서 input output 를 비교해서 보면서 해석을 하였는데 족히 10분은 넘게 걸렸던 것 같다. 

 

단순했다. 그냥 마지막 자리부터 0이 되게 만들고, 정답에 그 합친 수를 더하고 s보다 작거나 작아지게 만들면 됐다. 

 

하지만 10^n과 idx의 괴리감이 어제는 더 심했어서 구현에서 계속 꼬였었다. 

지금에서야 아는 사실이지만 0이 계속 나올때는 singed long long int 의 범위가 10^18이었기에, 오버플로우가 나서 0이 나왔다는 사실도 알았다. 

 

자고 일어나니 이렇게 간단히 풀릴 수가 없었다. 

 

아쉽다

 

그래도 코포하면 의욕도 생기고, 재미도 있고, 좋다