티스토리 뷰

 

 

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

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

programmers.co.kr

<풀이>

  • 주어진 카드로 만들수 있는 경우의 수를 고려하기 위해 순열을 활용하였다.
  • 순열을 직접 구현할 수도 있지만 이번에는 편하게 itertools를 활용해봤다.
  • 만든 숫자에서 소수를 골라내기 위해서도 단순하게 2부터 (만든 숫자 - 1)까지를 나눠서 나머지 0이 안 되게 모든 반복문을 모두 순회하면 answer를 1 추가 시켜줬다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from itertools import permutations
 
def solution(numbers):
    cards = [int(n) for n in numbers]
    answer = 0
    
    # visited를 만들기 위한 과정
    max_num = 0
    cards.sort()
    for c in range(len(cards)):
        max_num += cards[c] * (10 ** c)
    visited = [0 for _ in range(max_num + 1)]
    
    # 순열을 통해서 카드로 나올 수 있는 숫자를 완전 탐색
    for c in range(len(cards)):
        # itertools의 permutations를 활용하였다
        for elem in permutations(cards, c + 1):
            # card를 조합하여 숫자로 바꾸는 과정
            number = 0
            for e in range(len(elem)):
                number += elem[e] * (10 ** e)
            
            # 숫자가 0이거나 1이거나 이미 방문한 숫자면 이후 과정을 생략한다
            if number == 1 or number == 0 or visited[number]:
                continue
            visited[number] = 1
            
            # 2에서 number보다 1 작은 숫자까지 나눠서 나머지가 0이 되면 탈출하고
            for n in range(2, number):
                if not number % n:
                    break
            # 나머지가 0이 되는 숫자가 없으면 answer를 하나 추가
            else:
                answer += 1
    
    return answer
cs

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함