백준 ISBN

KIMYEONGJUN·2026년 2월 25일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

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

내가 이 문제를 보고 생각해본 부분

입력 처리
isbn 문자열로 입력받는다.
변수 초기화
missingIndex는 '*' 문자가 있는 위치를 저장한다.
sum에는 체크에 필요한 앞 12자리 누적 가중치 합을 저장한다.
가중치 합 계산
반복문으로 0~11번째 자리 검사하면서,
숫자는 자리별 가중치(짝수 인덱스는 1, 홀수는 3)를 곱해 sum에 더한다.
만약 '*'라면 그 자리 인덱스를 missingIndex에 저장한다.
마지막 자리 체크기호 저장
마지막 자리(12번째)는 체크기호를 의미하므로 lastDigit 변수에 저장한다.
'*' 위치 숫자 찾기
0부터 9까지 후보 숫자를 넣어본 뒤,
해당 후보를 곱한 가중치 합과 마지막 자리 체크기호를 더해서 10으로 나눈 나머지가 0이 되는 값을 찾는다.
정답 출력
나머지가 0이 되는 최초의 candidate 값을 출력하고 반복문 종료한다.

코드로 구현

package baekjoon.baekjoon_33;

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

// 백준 14626번 문제
public class Main1309 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String isbn = br.readLine();

        int missingIndex = -1;
        int sum = 0;

        for (int i = 0; i < 12; i++) { // 마지막 자리 제외
            char ch = isbn.charAt(i);
            if (ch == '*') {
                missingIndex = i;
            } else {
                int digit = ch - '0';
                if (i % 2 == 0) {
                    sum += digit;
                } else {
                    sum += 3 * digit;
                }
            }
        }

        // 마지막 자리 체크기호
        int lastDigit = isbn.charAt(12) - '0';

        // missingIndex 위치에 들어갈 숫자 찾기
        for (int candidate = 0; candidate <= 9; candidate++) {
            int candidateSum = sum;
            if (missingIndex != -1) {
                if (missingIndex % 2 == 0) {
                    candidateSum += candidate;
                } else {
                    candidateSum += 3 * candidate;
                }
            }
            int total = candidateSum + lastDigit;
            if (total % 10 == 0) {
                System.out.println(candidate);
                break;
            }
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글