<문제 제시>
<예시 입출력>
<문제 해결 과정>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 10430번 : 나머지
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sa = br.readLine();
int a = Integer.parseInt(sa);
String sb = br.readLine();
int b = Integer.parseInt(sb);
String sc = br.readLine();
int c = Integer.parseInt(sc);
System.out.println((a + b) % c);
System.out.println(((a % c) + (b % c)) % c);
System.out.println((a * b) % c);
System.out.println(((a % c) * (b % c)) % c);
}
}
처음 작성한 코드이다. 결과부터 말하자면 '컴파일 에러'
BufferedReader로 readLine() = 한줄씩 읽어 String에 담고 그 String을 정수형 변수로 변환하여 연산할 변수를 만들었다.
BufferedReader는 한 줄을 모두 읽는다는 것이 특징인데, String sa = br.readLine()을 통해 '5 8 4' 와 같은 데이터를 넣은 후
int a에 Integer.parseInt(sa); 를 통해 정수형 변환을 하려했지만, '5 8 4' 에는 공백이 포함되어있어서, 정수형으로 변환이 되지 않고 오류가 발생한 것이다.
해결방법으로는,
readLine을 .split() 메소드를 이용해 공백을 구분하여 입력을 받아야한다.
입력을 받을때는 split(" ")을 통해 공백을 기준으로 구분해서 입력받아야한다.
또한 배열로 입력받아야 복수의 데이터가 입력되더라도 정확히 담길 수 있게된다.
다 담았으면 배열에 접근하기위해서는 인덱스를 통해서 접근하면된다.
예를 들면
int a = Integer.parseInt(text[0]);
int b = Integer.parseInt(text[1]);
int c = Integer.parseInt(text[2]);
이러한 방식인 것이다.
<readLine.split(" ")이용>
String[] text = br.readLine().split(" ");
int a = Integer.parseInt(text[0]);
int b = Integer.parseInt(text[1]);
int c = Integer.parseInt(text[2]);
복수의 값을 입력받으므로 split(" ") 메소드로 공백을 구분해준 후 배열에 담는 해결법을 찾아냈다.
만약 배열이 아닌
String text = br.readLine();
int a = Integer.parseInt(text);
이러한 방식의 코드는 한 줄로 줄여 쓸 수 있을 것 같다.
<코드 수정>
int a = Integer.parseInt(br.readLine());
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 10430번 : 나머지
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] text = br.readLine().split(" ");
int a = Integer.parseInt(text[0]);
int b = Integer.parseInt(text[1]);
int c = Integer.parseInt(text[2]);
System.out.println((a + b) % c);
System.out.println(((a % c) + (b % c)) % c);
System.out.println((a * b) % c);
System.out.println(((a % c) * (b % c)) % c);
}
}
이번 코드풀이에서는 복수의 값이 입력될 경우, 특히 공백을 포함한 입력일 경우 공백을 구분해주어야한다는 방법을 찾을 수 있었다. split() 메소드를 이용할 수 있지만, 토크나이저를 통해 구분해줄 수도 있다.
Scanner 클래스를 통해서 입력받으면 좀 더 간단할 수 있지만, 시간적으로 BufferedReader를 사용하는 방법이 효율적이었다.
문제링크)
https://www.acmicpc.net/problem/10430
'Algorithms > 백준' 카테고리의 다른 글
[백준] 2753번 '윤년' - Java (0) | 2022.09.02 |
---|---|
[백준] 10172번 '개' - Java (2) | 2022.09.01 |
[백준] 18108번 '1998년생인 내가 태국에서는 2541년생?!' - Java (0) | 2022.08.30 |
[백준] 1008번 'A/B' - Java (0) | 2022.08.25 |
[백준] 3003번 '킹, 퀸, 룩, 비숍, 나이트, 폰' - Java (0) | 2022.08.23 |