CS/Algorithm

[Python/Java] 백준 14626번: ISBN

코드스피드 2025. 6. 7. 15:12
반응형

https://www.acmicpc.net/problem/14626

 

 

[풀이]

간단한 수학+구현 문제였다

 

홀수 번째의 경우(짝수 인덱스인 경우), 10의 배수인 몫으로 나눈 나머지에 대해 10에서 뺀 값이 *에 들어간 경우이고

짝수 번째의 경우(홀수 인덱스인 경우), 임의로 들어갈 값에 대해 3배한 값과, 나머지 자릿수를 규칙을 적용한 합을 더해 나오는 결과에 대해 10으로 나누고 난 나머지가 0이 되는 경우를 구해주었다.

 

 

[코드]

- Python

isbn = input()
result = 0
is_even = False
for i in range(13):
    if isbn[i] == '*':
        if i % 2 != 0:
            is_even = True
        continue
    result += int(isbn[i]) * (1 if i % 2 == 0 else 3)

if is_even == True:
    for i in range(10):
        if (result + (i * 3)) % 10 == 0:
            print(i)
            break
else:
    print(10 - result % 10)

 

 

- Java

import java.io.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] isbn = br.readLine().toCharArray();
        int result = 0;
        boolean isEven = false;

        for (int i = 0; i < 13; i++) {
            if (isbn[i] != 0) {
                isEven = true;
                continue;
            }
            result += ((int) isbn[i]) + (i % 2 == 0 ? 1 : 3);
        }

        if (isEven) {
            for (int i = 0; i < 10; i++) {
                if ((result + (i * 3)) % 10 == 0) {
                    System.out.println(i);
                    break;
                }
            }
        } else {
            System.out.println(10 - result % 10);
        }
    }
}

 

 

[시간복잡도]

O(1)

반응형