본문 바로가기

코드포스

[코드포스 Practice13] D. Which floor?

코포 끝나기 좀 전에 어떻게 풀지 감 잡아서 결국 못 풀었다.

 


로직은 저 아래쪽에 있는 거 그대로 짰다.

step이 1일때 ~ 50까지 배열 전부를 확인한다.

주어진 거랑 맞으면 위치 저장하고 다음거 계속 확인한다.

만약 일치하는게 있는데 이미 위치가 저장되었다면 그건 모호하게 되므로 -1출력하고 종료..

 

 

 

진짜 짜면서 너무 재밌고 즐겁고 내 코드에 확신하면서 제출했는데 3번에서 틀렸다.

 

 

 

이 경우에서 틀렸는데

 

나는 이렇게 하면 

 

1 1 1 1 2 2 2 2 도 되고

1 1 1 1 1 2 2 2 2 2 도 되니깐 틀린거로 봤다.

알고보니 이 두 경우 모두 8이 2이므로 참으로 해야했다. 

 

그래서 step 확인하는 부분만 바꿨고 맞았다. 

 

            if (ans == 0)
                ans = (n + step - 1)/step;
            else
            {
                if (ans != (n + step - 1)/step)
                {
                    printf("-1");
                    return 0;
                }
            }

 

이렇게 바꿨음

ans가 아직 값이 없다면 값을 넣어주고

이미 차있으면 넣으려는 값과 비교한다. 같으면 패스~

 

 

 

맞았다. 히히히히

저번 D번이랑 비슷하게 어렵지는 않은데 시간 많이 걸리는 문제인 것 같다

 

 


 

 

이건 북님 코드

 

나는 모든 배열을 다 확인했는데 여긴 입력으로 들어오는 m개만 확인했다.

생각해보니 그렇네ㅋㅋ m개만 확인해도 됐다.

 

아 그리고 확인하는 식을 저렇게 할 수도 있구나 자기보다 작은 거 개수 확인하고 자신 이후의 수 확인하고. 범위로 파악했다. 

 

이건 좀 낯설다,, 익숙해지려면 시간 좀 걸릴듯. 지금은 저런 방식으로 확인하구나 정도만 알아놔야겠다.