728x90

프로그래머스 완주하지 못한 선수 문제

 

간단한 문제라고 생각했는데, 효율성에서 자꾸 실패했다.

반복문이 아니면 풀지 못 할거라 생각하고 결국 구글링을 했는데...

역시 파이썬의 간결함은 끝이 없구나...너무 신기하고 알아두면 좋을 개념인거 같아서 정리한다.

 

문제

 

풀이

 

나는 당연하게도 participant를 반복문으로 돌면서 completion에 요소가 있으면 completion에 값을 삭제해주는 방식으로 하여 동명이인 부분도 해결하며 문제를 풀었다.(풀었다고 생각했다.) 하지만 위에서 언급한것 처럼 효율성문제에서 실패했고, 

반복문이 아니면 다른 방법이 있을까해서 찾아보니 counter를 쓸수 있더라..

우선 해답부터 첨부하고, counter에 대해서 알아보려 한다.

 

 


파이썬의 collections 모듈의 counter 클래스

 

데이터의 개수를 셀 때 파이썬에 내장된 collections 모듈의 counter 클래스가 유용하다고 한다.

해당 클래스를 사용해주면 데이터가 어떤 형태로 변형이 되는 것일까??

위의 코드에서 collections.Counter(participant) 를 print 해보았다.

마치 dictionary 형태로 출력이 된다. 이는 비단 list 뿐아니라, 문자열을 넣어도 위와 같이 출력을 해준다, 

즉 counter 클래스는 정확히 데이터 내의 각 요소들이 몇개가 있는지, dictionary 형태로 출력해주는 것이다.

(기존에 이를 위해서는 반복문와 조건문을 혼합해서 사용했는데, 코드를 한줄로 바로 줄여준다.)

 

counter 클래스가 가지고 있는 most_common() 이라는 메소드를 사용하면, 데이터 내의 요소들이 몇 번 사용되는지를 바로 출력 가능하다.

해당 알고리즘 문제처럼 연산도 가능하다(빼기...더하기..!)

우선 해당 클래스로 dictionary 형태로 출력되는 것이지, dictionary가 연산이 가능하고 해당 메소드를 사용할 수 있는 것은 아니다.

하지만 dictionary 의 확장이므로, counter는 dictionary의 메소드(keys() 같은)를 사용할 수 있다!

728x90

+ Recent posts