본문 바로가기
Coding Test/Python

[Codility] Pi Code Challenge Python

by giem 2023. 4. 14.
반응형

오랜만에 Codility Challenge에 도전해 봤다.

 

다음 링크로 접속하면 코딜리티 챌린지에 도전할 수 있다.

https://app.codility.com/programmers/challenges/

 

Pi Code Challenge challenge

Show your skills!

app.codility.com

 

120분이 주어지고 웬만한 언어는 모두 사용할 수 있다.

 

결과는 아쉽게 silver award를 받았다.

 

결국 golden award를 받아냈다

 

https://app.codility.com/cert/view/certGZCQDP-F9SNH7TKQMAH37EG/


문제 설명

 

영어 울렁증이 있는 분들을 위해 문제 설명을 하면

 

알파벳으로 된 P, Q 두 문자열이 주어지고 결과 문자열 S를 만들어 S에서 유니크한 알파벳의 수를 리턴해야 한다.

이때 유니크한 알파벳의 수는 최소로 해서 S를 만들어야 한다.

 

S를 만들 때는 S [i] = P [i] or Q [i]로 만들 수 있다.

 

예를 들어 P = "abc", Q = "bcd"일 때

 

S는 abc, abd, acc, acd, bbc, bbd, bcc, bcd가 나올 수 있고 유니크한 알파벳 개수가 가장 작은 acc, bbc, bbd, bcc 이 S로 선택될 수 있으며 답은 2로 리턴한다.

 

 


구현 방법

이 방법은 silver award에 그친다.

 

더 나은 방법을 찾으면 업데이트를 하겠다.

 

P = "abc", Q = "bcd" 예시로 설명을 하겠다.

 

S [i] = P [i] or Q [i] 여기에

index 하나하나 넣어서 조합들을 만들 것이다.

 

처음 index가 0일 때 조합은

a, b가 나온다.

 

그다음 index가 1일 때는 기존의 a, b에 각각 b, c를 붙인다.

그러면 ab, ac, bb, bc가 나올 것이다.

 

여기서 중복을 제거해 주면

ab, ac, b, bc가 된다.

 

다음 index가 2일 때 기존의 ab, ac, b, bc에 c, d를 넣고 중복을 제거해 주면

abc, abd, ac, acd, bc, bd, bc, bcd

이렇게 조합이 나온다.

 

이 조합 사이에서도 중간중간 중복을 제거해 주어야 한다.

 

이렇게 모두 구한 후 가장 길이가 적은 것을 리턴해주었다.


코드

사실 위에 다 설명을 했지만

코드는 챌린지가 종료된 후에 업데이트하겠다.

반응형

댓글