코딩테스트/🧮 프로그래머스

🧮 [프로그래머스] 달리기 경주

늦은산책 2023. 8. 4. 11:22
문제

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제이해 & 풀이

 

문제를 이해하는것 자체는 굉장히 쉽다. 가끔 이런 문제는 넌센스 같은 느낌으로 푼적이 있다.

설명

현재 달리고 있는 선수들(players)중에 해설진들이 선수를 호명(callings)하면 그 선수는 자신 바로 앞에 있는 선수를 제쳤다! 라는 뜻이다.

 

이 문제의 큰 산은 문제에 대한 이해가 아니라 시간복잡도이다. 문제의 조건 중 이러한 조건이 있다.

이 조건은 2중 for문의 시간복잡도(O(n2))에서 문제가 생긴다. callings의 제곱이 1억을 넘게 되면 시간초과가 발생할 수 있다는 것이다. 

 

실패한 나의 코드

 

그래서 2번째안 해시함수를 사용하는것이다. 해시의 시간 복잡도는 O(n)으로써 전혀 문제가 되지 않는다는 것이다. 

HashMap 을 이용해서 문제를 푸는것이 해답이다.

 

소스 코드