anony02   2년 전

안녕하세요. 백준사이트 가입한지 3일차 되는 코딩초보입니다.

11021번 문제에서 시간을 줄이기 위해

Scanner와 println대신 BufferedReader와 BufferedWriter를 사용해서 코딩을 해보았는데요.

출력이 원하는 대로 나오지 않는데 이유가 궁금해 질문드립니다.

예제 입력처럼

5

1 1

2 3

3 4

9 8

5 2

를 입력하면 1+1=2로 출력이 되는게 아니라 11로 출력이되네요.

코드 10번째줄을

bw.write("Case #"+i+": ");

bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");

이렇게 두 줄로 나누거나

bw.write("Case #"+i+": "+(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken()))+"\n");

이렇게 숫자부분을 괄호로 묶으면 제대로 출력이 되는데 이유를 모르겠습니다ㅠㅠ

도움부탁드립니다..!

djm03178   2년 전

덧셈 연산자의 결합 순서가 왼쪽에서 오른쪽이기 때문에 그렇습니다. String + Integer는 String인데, String인 "Case #"+i+": "에 Integer인 Integer.parseInt(st.nextToken())가 더해져 다시 String이 되고 이는 이미 말씀하신 예시에서 1로 끝나는 문자열입니다. 여기에 다시 Integer.parseInt(st.nextToken())를 더해서 뒤에 1이 하나 더 붙은 문자열이 만들어지게 됩니다.

이를 해결하려면 Integer끼리 더하는 부분을 괄호로 묶으면 됩니다.

anony02   2년 전

덕분에 완벽히 이해됐습니다! 감사합니다.

댓글을 작성하려면 로그인해야 합니다.