[백준] 17202 핸드폰 번호 궁합

박선영·2023년 10월 14일
0
post-thumbnail

17202 핸드폰 번호 궁합

📄Description

어린시절 다들 한 번씩은 이름으로 궁합을 본 적이 있을 것이다. 이것과 비슷한 방식으로 중앙대학교에는 핸드폰 번호 궁합을 보는 것이 유행이라고 한다.

핸드폰 번호 궁합을 보기 위해서는 먼저 궁합을 보고싶은 두 중앙대생 A와 B의 핸드폰 번호에서 맨 앞의 010과 "-"(하이픈)을 모두 제외한 후, A부터 시작하여 한 숫자씩 번갈아가면서 적는다. 그리고 인접한 두 숫자끼리 더한 값의 일의 자리를 두 숫자의 아래에 적어나가면서 마지막에 남는 숫자 2개로 궁합률을 구하게 된다.

예를 들어, 아래의 그림과 같이 A의 번호가 010-7475-9336 이고, B의 번호가 010-3619-5974 이면, 7346715995393764에서 시작하여 070386484822030, 77314022204233, 4045424424656, 449966866011, 83852442612, 1137686873, 240344450, 64378895, 0705674, 775131, 42644, 6808, 488, 26이 되어 둘은 26%의 궁합률을 가지게 된다.

위의 예시에서처럼 인접한 두 숫자를 더한 값이 두자리 정수가 되더라도, 일의 자리 숫자만 적는다. 가령 7과 3을 더하면 0을 적고, 4와 8을 더하면 2를 적는다.

중앙대학교에서 유행인 핸드폰 번호 궁합률을 알아보는 프로그램을 작성해보자. 단, A와 B의 핸드폰 번호는 다르다고 가정한다.

입력 조건

  • 첫 번째 줄에는 궁합을 보고싶은 중앙대생 A의 핸드폰 번호가 주어진다.
  • 두 번째 줄에는 궁합을 보고싶은 상대방 B의 핸드폰 번호가 주어진다.
  • 핸드폰 번호는 맨 앞의 010과 "-"(하이픈)을 제외하여 숫자 8개로 주어진다.
  • A와 B의 핸드폰 번호는 같지 않다.

출력 조건

  • A와 B의 핸드폰 번호 궁합률을 두자리 정수로 출력한다.
  • 십의 자리가 0이어도 앞에 0을 붙여 두자리로 출력한다.

예제 입력

inputoutput
74759336
36195974
26
01234567
12345678
02

🤔생각 정리

  1. 일단 두 전화번호를 하나의 리스트로 병합해야겠네.
  2. 리스트의 길이가 2개가 될 때까지 앞뒤 원소들을 더하면서 일의 자리 숫자를 기록해야겠네.
  3. 출력값은 두 자리니까 문자열 메소드인 zfill을 사용해서 채우면 되겠네.

💡Pseudo Code💡

1. num = 두 번호 더해서 하나의 리스트로 병합하기
2. while len(num) > 2:
3.		new = []
4. 		for i in range(len(num)-1):
5. 			new.append(앞뒤 원소의 합의 일의 자리 숫자)
6. return 두자리 점수

🖥️코드화

# 입력
num1, num2 = input(), input()

num = [] # 두 리스트 병합
for n1, n2 in zip(num1, num2):
    num.extend([int(n1), int(n2)])

while len(num) > 2:
    num = [(num[i] + num[i+1]) % 10 for i in range(len(num)-1)]

# 출력
print(''.join(map(str, num)).zfill(2))

📌코드 비교 및 감상

  • 유사한 접근인데 다른 구현 방식이 있어 코드를 인용해왔다.
    1) 두 리스트를 병합할 때 전체 리스트를 생성한 후 슬라이싱을 사용해 원소를 할당한다.
    2) 앞뒤 원소의 합을 계산할 때도 zip 함수를 사용한다.
    3) 출력할 때 * 사용해서 모두 출력한다.
# 입력 받고 리스트 병합
num = [0]*16
num[::2] = map(int, input())
num[1::2] = map(int, input())

while len(num) > 2:
	num = [(i+j) % 10 for i,j in zip(num, num[1:])]

#출력
print(*num, sep='')
profile
데이터를 만지는 사람

0개의 댓글

관련 채용 정보