
0번부터 13번을 표로 만들었습니다.
두번째 표는 ISBN 숫자
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9 | 7 | 8 | 8 | 9 | 6 | 8 | 7 | 3 | 2 | 2 | * | 7 | 3 |
각 자리마다 가중치 1, 3, 1, 3... 곱한 것을 모두 더합니다.
마지막 검증 숫자 = 3
둘째줄은 3을 전부 곱해줍니다.
| 홀 | 9 | 8 | 9 | 8 | 2 | * |
|---|---|---|---|---|---|---|
| 짝 | 21 | 24 | 18 | 9 | 6 | 21 |
별 제외 합: 9+21+8+24+9+18+8+9+2+6+21 = 135
(앞12자리합 + 검증숫자) % 10 == 0
(135 + + 3) % 10 == 0
(138 + ) % 10 == 0
import java.util.*;
public class ISBN {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// ISBN 코드
String s = sc.next();
int sum = 0; // '*'을 제외한 앞 12자리의 합
int start = -1; // '*'이 위치한 인덱스
// 앞의 12자리
for(int i=0; i<12; i++) {
char c = s.charAt(i);
// 짝수 → 1, 홀수 → 3
int isbn = ( i % 2 == 1 ) ? 3 : 1;
if(c == '*') {
// '*'이면 위치만 저장 (값은 아직 모름)
start = i;
} else {
// 숫자라면 가중치를 곱해서 합에 더함
sum += (c-'0')*isbn;
}
}
// 마지막 자리(검증 숫자)
int check = s.charAt(12)-'0';
// '*'이 위치한 자리의 계산
int checknum = (start % 2 == 1) ? 3 : 1;
// '*'에 들어갈 숫자 범위 0~9 까지
for(int x=0; x<=9; x++) {
// 전체 합이 10의 배수가 되면 ISBN
if((sum + x * checknum + check) % 10 == 0) {
System.out.println(x);
break;
}
}
sc.close();
}
}
나름 학창시절에 도서부원이었어서 쉬울줄 알았는데,
정멀 쉽지않았던 문제. 🙂