Python/문제

주민등록번호 유효성 검사 프로그램 만들기

dustKim 2024. 3. 20. 14:35
문제

위 문제를 풀어보자.

Class 없이 문제풀이

먼저 클래스를 사용하지 않고 문제를 풀어보았다. Class를 곧바로 적용하면서 문제를 풀다 보니 알게 모르게 자꾸 에러가 나게 되어 일단은 클래스 없이 문제를 풀어보자 생각을 했다.

첫 번째는 주민등록번호를 입력 받고 그 입력받은 값을 int 로 형변환을 해주는 것인데 이제 까지 배웠던 함수들을 활용해 보았다. 처음 작성을 할 때, RRN = list(map(int(input(" ")))) 이렇게 작성을 했는데 오류가 났었다. 그 이유를 알아보니, Python에서의 Map() 함수는 최소 두 개의 인자가 필요하다고 한다.

Map(함수, 이터러블 객체), 그래서 RRN = list(map(int, str(input(" ")))) 이런 식으로 바꿔줬더니 해결되었다. 사소하지만 사용하면서 잘 확인해 봐야겠다.

두 번째는 반복문을 사용해서 list 인덱스의 값과 특정값을 곱해주고, 곱해진 값들을 더하는 것이다. for문을 이용하면 간단하게 만들 수 있다. 물론 특정 값의 list를 만들어서 서로의 인덱스 값을 곱하는 형식으로 가되 된다. 뒤에 방법이 더 짧을 것 같기도 하다.

세 번째는 간단한 연산을 해주는 것이라 설명은 생략하겠다.

Class 적용

이번에는 Class를 적용하여 문제를 풀어보았다. 주민등록번호를 받아주는 것은 처음과 똑같은 형식으로 만들었고, Total Class와 그 안에 생성자 및 3개의 메서드를 만들었다.

첫 번째 메서드(first)는 인덱스 값과 특정 값의 곱과 그들의 합인데, 먼저 생성자에 self.rrn을 만들어서 받아준 인자값을 다른 함수에서도 사용할 수 있게 만들었다. 맨 처음에 입력받은 주민등록번호 list를 Total 클래스 내부 생성자의 매개변수 rrn으로 전달하고 first함수를 호출, 함수 안에서 self.rrn을 활용했다. self를 붙였기 때문에 다른 메서드에서 self.을 붙이면 사용할 수 있게 된다. 그렇게 반복문을 돌렸다.

두 번째 메서드(second)는 단순 연산인데, 첫 번째 메서드에서 반환된 sum값을 사용하기 위해서 매개변수 num1을 만들었다. 그리고 마지막에 num 값을 반환한다.(마지막 함수에서 쓰기위함)

마지막 메서드(final)는 출력하는 함수이다. 간단하게 두 번째 메서드에서 반환된 num값을 매개변수로 받고, 방금 이야기했던 self.rrn의 마지막 인덱스와 비교하여 출력을 하면 원하는 결과를 얻을 수 있다. (rrn도 RRN을 매개변수로 받은 것이라서 가능)