백준 14626번 - ISBN

느린달팽이·2025년 8월 20일

백준 Java

목록 보기
14/14

📂 백준 14626번 - ISBN

문제 링크


📝 문제 설명

ISBN(International Standard Book Number)은 전 세계 모든 도서에 부여된 고유번호로, 국제 표준 도서번호이다. ISBN에는 국가명, 발행자 등의 정보가 담겨 있으며 13자리의 숫자로 표시된다. 그중 마지막 숫자는 체크기호로 ISBN의 정확성 여부를 점검할 수 있는 숫자이다. 이 체크기호는 일련번호의 앞에서부터 각 자리마다 가중치 1, 3, 1, 3…. 를 곱한 것을 모두 더하고, 그 값을 10으로 나눈 나머지가 0이 되도록 만드는 숫자 m을 사용한다. 수학적으로는 다음과 같다.

ISBN이 abcdefghijklm 일 때, a+3b+c+3d+e+3f+g+3h+i+3j+k+3l+m ≡ 0 (mod 10)

즉, 체크기호 m = 10 - (a+3b+c+3d+e+3f+g+3h+i+3j+k+3l) mod 10 이다.

단, 10으로 나눈 나머지 값이 0일 경우 체크기호는 0이다.

전북대학교 중앙도서관에서 사서로 일하고 있는 영훈이는 책 정리를 하다가 개구쟁이 광현이에 의해서 ISBN이 훼손된 도서들을 발견했다. 광현이때문에 야근해야 하는 불쌍한 영훈이를 위해서 손상된 자리의 숫자를 찾아내는 프로그램을 작성해주자.

ISBN 13자리 숫자가 입력된다. 훼손된 숫자는 *로 표시한다. (훼손된 일련번호는 체크기호를 제외한 무작위 한 자리이다.)


출력

훼손된 숫자 *에 알맞은 숫자를 출력한다.


✅ 입력 예시

9788968322*73

✅ 예제 출력

2

💡 풀이 코드 (풀이코드한 언어)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class bj_14626 {

	public static void main(String[] args) throws IOException {
		
		// 가중치가 1,3,1,3 ... 이니까
		// 홀수위치에는 1을 곱하고 짝수 위치에는 3을 곱하여 다 더했을때 10으로 나눈 나머지가 0이면된다.
		//10으로 나눈 나머지가 0이 될 수 있는 훼손된 숫자 값을 구한다.
		
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		
		String s = bf.readLine();
		
		int idx = 0, sum = 0;		
		
		for(int i=0; i<s.length(); i++) {
			char ch = s.charAt(i);
			//손상된 자리를 제외한 모든 숫자에 대한 가중치를 적용한 합
			//i%2 == 0 -> 짝수인덱스 -> 홀수번째 -> 그대로 더하기
			//i%2 != 0 -> 홀수인덱스 -> 짝수번째 -> 3곱해서 더하기
			if(ch != '*') sum += i % 2 == 0? ch - '0' : (ch - '0') *3;
			//손상된 자리를 넣어줌
			else idx = i;
		}
		
		int answer = 0;
		for(int i =0; i<10; i++) {
			//손상된 자리에 들어올 숫자 0~9
			//숫자 넣어봐서 가중치 넣어 계산해보기
			//i%2 == 0 -> 짝수인덱스 -> 홀수번째 -> 그대로 더하기
			//i%2 != 0 -> 홀수인덱스 -> 짝수번째 -> 3곱해서 더하기
			if(idx % 2 == 0 && (sum + i) % 10 == 0) {
				answer = i; 
			}
			else if(idx % 2 != 0 && (sum + 3 * i) % 10 == 0) {
				answer = i; 
			}
		}
		
		System.out.print(answer);

	}

}

profile
한걸음이라도 제대로... 쓰임있는 앱을 만들자

0개의 댓글