[백준] 2659번 십자카드 문제

거북이·2023년 3월 19일
0

백준[실버3]

목록 보기
74/92
post-thumbnail

💡문제접근

  • 처음에 문제를 풀었을 때 한 가지 고려하지 못한 점이 있었다.
  • 예를 들어 1121이 적혀있는 카드는 이 카드의 시계수가 1112로 앞에서 이미 세어주었기 때문에 1121을 시계수가 될 수 없다. 나는 이 조건을 고려하지 못해서 처음에 10이 나왔어야 하는 답이 계속 11이 나와서 WA를 받았다.
  • 그래서 별도로 시계수를 구하는 함수와 입력받은 4가지 수의 조합으로 나올 수 있는 가장 작은 시계수를 구해서 카운팅해주는 방식으로 코드를 작성했다.

💡코드(메모리 : 34128KB, 시간 : 96ms)

from collections import deque
import sys
input = sys.stdin.readline

clock_num = deque(map(int, input().strip().split()))

result = []
# 회전을 고려해서 데크(deque) 자료구조를 이용함
for i in range(4):
    num = clock_num[0] * 1000 + clock_num[1] * 100 + clock_num[2] * 10 + clock_num[3] * 1
    result.append(num)
    num = 0
    temp = clock_num.popleft()
    clock_num.append(temp)
Min_clock_num = min(result) # 시계수의 최소값

# 동일한 구성을 갖는 경우 시계수에 포함이 될 수 없다는 조건을 뒤늦게 인지함
# 4가지 수의 조합으로 나올 수 있는 가장 작은 시계수를 구하는 함수
def make_clock_num(X):
    Min = int(''.join(map(str, X)))
    for i in range(1, 4):
        res = int(''.join(map(str, X[i:] + X[:i])))
        if Min > res:
            Min = res
    return Min

answer = 0
for i in range(1111, Min_clock_num+1):
    if '0' not in list(str(i)) and i == make_clock_num(list(map(int, str(i)))):
        answer += 1
print(answer)

💡소요시간 : 24m

0개의 댓글