14551번 Card Game Contest
이왜틀?
또 1년 전 틀렸습니다가 우수수 떨어진 문제.
뭐가 문제였을까?
StringBuilder sb=new StringBuilder();
StringTokenizer st=new StringTokenizer(br.readLine()," ");
int n=Integer.parseInt(st.nextToken());
BigInteger m=new BigInteger(st.nextToken());
if(n==0) sb.append(1);
else {
BigInteger r=new BigInteger("1");
while(n-->0) {
String t=br.readLine();
if(!t.equals("0")) r=r.multiply(new BigInteger(t));
}
sb.append(r.remainder(m).toString());
}
bw.write(sb.toString());
BigInteger를 사용했으니 오버플로우는 없을테고
이것도 일단은 맞지 않나??
애초에 나머지 연산을 미리하면되는데 BigInteger는 왜 쓴거지?
설계
문제가 한글로 쓰인게 맞나 싶은데
요지는 모든 정수 A를 곱하되 0은 1로 처리하면 된다.
구현
N, M = map(int, input().split())
result = 1;
while N > 0:
A = int(input())
if A != 0:
result *= A
result %= M
N -= 1
print(result % M)
채점
아하… 풀어보고 알았다.
Java 코드는 틀린 게 맞다.
0 1을 입력하면 경우의 수는 1이지만 1 모듈로 연산으로 0이 답인데 나는 1을 출력했다.
반성
틀리는 이유가 이렇게 잘 보이는데 왜 1년 전에는 몰랐을까
코드 확인