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)
반응형