백준 17202번: 핸드폰 번호 궁합
알고리즘 분류: 구현, 다이나믹 프로그래밍, 문자열
파이썬(Python) 풀이
링크: https://www.acmicpc.net/problem/17202
문제
어린시절 다들 한 번씩은 이름으로 궁합을 본 적이 있을 것이다. 이것과 비슷한 방식으로 중앙대학교에는 핸드폰 번호 궁합을 보는 것이 유행이라고 한다.
핸드폰 번호 궁합을 보기 위해서는 먼저 궁합을 보고싶은 두 중앙대생 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을 붙여 두자리로 출력한다.
풀이
이 문제를 봤을 때, 그냥 문자열을 합치고 양쪽을 더하면 된다고 생각했다.
따라서 A와 B의 핸드폰 번호를 입력받고, 그 두개를 C라는 List를 만들어서 넣으면 된다.
넣는 과정은 물론 A[0] 넣고 B[0] 넣고... A[7], B[7]까지C.append(A[i])C.append(B[i]) 이런식으로 넣어도 되지만
첫번째 과정의 전체 연산 횟수는 8+8-1이므로 len(A+B)-1로 표현하였고,
A[i]+B[i]와 동시에 %10을 해주어서
1회 연산을 마친 뒤의 번호로 나열하였다.
이후로는 C의 길이가 2가 될때까지
D라는 임시 리스트를 만들고 C의 i번째와 i+1번째를 더한 뒤 1의자리만을 D에게 삽입하는 식으로 하였다.
이때 주의할 것은 전체 연산 횟수는 숫자가 15개면 14번이므로 len(C)-1회만큼 해야한다.
이렇게 코드를 짜면 다음의 결과가 나온다.
'🌀 알고리즘(Algorithm) > 백준(문제 풀이)' 카테고리의 다른 글
[파이썬 풀이] 25345번: 루나의 게임 세팅 - 백준 (0) | 2022.08.17 |
---|---|
[파이썬 풀이] 1152번: 단어의 개수 - 백준 (0) | 2022.08.14 |
[파이썬 풀이] 24039번: 2021은 무엇이 특별할까? - 백준 (0) | 2022.07.19 |
[파이썬 풀이] 2535번: 아시아 정보올림피아드 - 백준 (0) | 2022.07.15 |
[파이썬 풀이] 2869번: 달팽이는 올라가고 싶다 - 백준 (0) | 2022.07.10 |