위 사이트의 129번 문제입니다!
사이트에서 제시한 정답을 바로 생각하기는 했는데, 정답이랑 다르게 해보고 싶어서 고심하고 고심해서 이상하고 못생긴 코드 만들어 봤습니다!
제가 넣은 예제들로는 정상적으로 작동하기는 하나, 제가 생각해도 너무 부족하고 모자른 점이 많은 것 같아서 조언 부탁 드리겠습니다!
코드 첨부 하겠습니다!
-------------------------------------------------------------------------------------------------------
주민번호 = input("주민번호를 입력하세요:") #주민번호 입력
앞자리 = 주민번호.split("-")[0] #821010 // 앞자리 분류
뒷자리 = 주민번호.split("-")[1][0:6] #163521 // 뒷자리 분류 원본:1635210
끝자리 = 주민번호.split("-")[1][-1] #0 //주민번호 끝자리 분류
sum = 0 #연산에 이용할 변수
for i in range(len(앞자리)): #앞자리 주민번호 각각 2,3,4,5,6,7 곱하고 모두 더하는 반복문
sum += (i+2)*int(앞자리[i])
backnum = 7 #뒷자리 곱셈에 사용할 변수
for i in range(len(뒷자리)): #마지막 숫자를 제외, 주민번호 뒷자리 각각 8,9,2,3,4,5 곱하고 더하는 반복문
backnum += 1
if backnum > 9:
backnum = 2
sum += backnum * int(뒷자리[i])
sum = 11- (sum%11) #1차계산 2차계산 값
if sum == int(끝자리): #끝자리와 내가 계산한 수의 일의자리가 일치하면 유효한 주민번호
print("유효한 주민번호 입니다.")
elif(sum>9):
if str(sum)[1] == 끝자리:
print("유효한 주민번호 입니다.")
else:
print("유효하지 않은 주민등록번호입니다. ")
else:
print("유효하지 않은 주민등록번호입니다. ")
------------------------------------------------------------------------------------------------------
예제가 주변 사람들 주민번호라 예제 첨부 못하는건 양해 부탁 드립니다!
아직 너무나도 부족한 점이 많아, 이 코드를 작성하는 것도 한두시간 걸렸습니다.. 한 곳에서 막히면 그 줄에서 꽤 오랜 시간이 걸리네요..
제가 생각해도
for i in range(len(뒷자리)): #마지막 숫자를 제외, 주민번호 뒷자리 각각 8,9,2,3,4,5 곱하고 더하는 반복문
backnum += 1
if backnum > 9:
backnum = 2
sum += backnum * int(뒷자리[i])
이 코드를 너무 어거지로 짠 거 같다고 생각됩니다..
조언 해주시면 달게 받겠습니다! 감사합니다!
문제가 너무 쉬워서 만족을 못하는 듯
넵 정답이 너무 단순 코딩이라 다른 방법으로 하고싶었어요
13자리를 맨 앞 자리를 0번째라 하면 마지막 자리가 12번째고 0부터 12자리까지 2부터 9까지의 숫자 범위를 반복하면서 하나씩 곱하는거잖아 그러면 자릿수를 숫자 범위 길이(8)로 나눈 나머지에서 2 더하면 숫자 나올거고
먼저 주민등록번호 문자열 "-" 기준으로 앞뒤로 나눠야겠지? 그리고 마지막 자리 제외하고 앞자리+뒷자리 더해서 12자리 문자열로 만들고 enumerate 함수 사용하든 for문 돌든 해서 각 문자랑 인덱스 가져오고 위에서 말한 것처럼 인덱스 8로 나눈 나머지에 2 더한 값을 해당 인덱스 위치의 수에 곱한 값을 계속 더해가고 (total이든 sum이든)
for문 다돌고 계산 끝나면 문제에서 말하는 공식가지고 (11-(total % 11) % 10 검증값이랑 13번째 자리 비교하면 되겠네
12자리 문자열로 합칠 생각은 못하고 있었네요! 인덱스에서 8로 나누고 나머지에 2를 더하는 것도 몰랐어요! 확실히 제가 만든 반복문 코드보다 그게 훨씬 깔끔하네요! 감사합니다ㅜㅜ