스터디/알고리즘

[2659] 십자카드 문제

세졍 2024. 1. 13. 18:40

문제이해
십자카드4숫자를 시계방향으로 이동해서 4개숫자 중 가장작은숫자가 : 시계수
1111~9999 숫자중 (카드에 0숫자는 없음 제외하기)
찾은 시계수가 몇번째로 작은지 구하기

 

 

#시계수 구하는 함수
def findclock(string_num): # 스트링인 숫자를 받아 정수인 시계수를 만드는 함수
    clocknumber = 99999
    ans = ''
    for i in range(4):
        ans = string_num[i:]+string_num[:i]
        if clocknumber > int(ans):
            clocknumber = int(ans)
    return clocknumber


card = list(map(int,input().split())) #  2 1 1 2
string_num = ''.join(map(str, card))  # join은 스트링을 붙이니깐 str으로 변환하기 2112
num = findclock(string_num) # 시계수 찾음



#1111~9999숫자중에서 1122가 몇번째로 작은지 구하기
cnt = 0
for i in range(1111,num+1):
    if '0'  in str(i):
        continue
    if findclock(str(i)) == i : # 그숫자가 시계수찾는 함수를 돌렸을때 시계수여야한다
       cnt += 1
print(cnt)

 

a = 2020
if 0 not in a:
    print()
else:
    print()
    
# 숫자에 0 이있는지 검사?? 안됨 오류남
# 0과 숫자를 문자열로 바꾸고 검사해야함

a = 2020
if '0' not in str(a):
    print('')
else:
    print('')

<comment>

clocknumber = 99999를 처음에 함수안에 안적고 입력받을때 정의하고 

함수에는 global로 사용하였더니 마지막 for문을 돌때 한번돌았던 clocknumber로 계속사용되서

clocknumber = 99999로 갱신이 안됬다..(이유한참 찾음  디버깅의 중요성..!)