14551번 Card Game Contest | 뭐라도 하겠지

14551번 Card Game Contest

이왜틀?


img01

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)

채점


img02

아하… 풀어보고 알았다.
Java 코드는 틀린 게 맞다.
0 1을 입력하면 경우의 수는 1이지만 1 모듈로 연산으로 0이 답인데 나는 1을 출력했다.

반성


틀리는 이유가 이렇게 잘 보이는데 왜 1년 전에는 몰랐을까

코드 확인


Link to GitHub

Updated: