티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 �

programmers.co.kr

문제는 이렇다.

숫자들이 주어지고 이 숫자들이 조합되어 나올 수 있는 모든수 중에 소수가 몇개인가? 를 return하는 문제

 

처음에는 모든 수의 조합을 for문을 이용하여 구현하려 했으나 구현 도중에 모든 경우의 조합수를 구현해놓은 내장함수가 있지 않을까? 라는 생각이 들어 검색했다.

진짜로 있었다.  

programmers.co.kr/learn/courses/4008/lessons/12836

 

파이썬을 파이썬답게 - 순열과 조합 - combinations, permutations

본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코

programmers.co.kr

#https://programmers.co.kr/learn/courses/4008/lessons/12836

import itertools

pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 수열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 수열 만들기

import itertools , permutations 를 이용하면 모든 조합을 알려준다.

모든 조합을 구현하려고 열심히 시간과 머리를 썻었는데 내장함수가 있었다니.

앞으로는 검색을 먼저하는 습관을 들여야 겠다. 나의 코딩시간도 효율적으로 하기 위해 ..

 

그래서 완성한 코드.

isPrime을 만들어서 소수를 체크하고

permutations로 나온 문자열들을 int형으로 바꿔 넣어서 isPrime 이 True를 리턴하면 answer에 넣는다.

한자리씩 조합이 가능하고 숫자가 중복될수도 있기때문에 필히 중복된 정답들이 발생하는데, answer을 set()형태로 지정함으로서 중복 문제는 해결했다.

011과 같이 으로 시작하는 숫자는 11과 중복되니까 0으로 시작하지 않는 문자열들만 넣어주었다.

 

이번 연습문제로 itertools나 permutation같은 내장함수 사용법을 알게되어서 도움이 되었다.

특히 검색능력도 코딩의 능력중 하나라는것도 되새기게 되었다.

모든 조합의 수를 구현하려고 시간을 엄청 낭비했지만 내장함수의 도움으로 내가 기존에 짯던 코드보다 더 간편하고 효율적인 함수를 이용하니까 스트레스도 덜 받고 좋았다.