백준 10430 java 풀이
예전에 풀어봤던 간단한 문제인데 과거에 풀 때랑 다르게 어떤 방식을 쓸지 궁금해서 몸을 풀겸 풀어봤다.
예전 풀이)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main10430 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
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);
}
}
사실 더 이전에는 Scanner를 썼던것 같은데 BufferedReader를 쓰는거랑 성능차이가 많이나서 메모는 후자로 했던것 같다.
알고리즘을 많이 접하면서 BufferedReader를 Scanner보다 더 편하게 사용하는것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
StringBuilder sb =new StringBuilder();
sb.append((A+B)%C+"\n").append(((A%C)+(B%C))%C+"\n").append((A*B)%C+"\n").append(((A%C)*(B%C))%C);
System.out.println(sb);
}
}
이 문제의 경우 시간 제한에 걸리지 않지만 System.out.println() 같은 경우도 성능이 좋지 않아서 StringBuilder를 사용하곤 한다. 이 문제의 경우 크게 상관없긴하다. StringBuilder.append()의 경우 쭉 이어서 쓸수 있는 점이 좋다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write((A+B)%C+"\n");
bw.write(((A%C+B%C))%C+"\n");
bw.write((A*B)%C+"\n");
bw.write((A%C*B%C)%C+"\n");
bw.flush();
bw.close();
}
}
BufferedWriter까지 쓴 아주 성능 좋은 풀이다.
그런데,
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write((A+B)%C);
bw.newLine();
bw.write(((A%C+B%C))%C);
bw.newLine();
bw.write((A*B)%C);
bw.newLine();
bw.write((A%C*B%C)%C);
bw.flush();
bw.close();
}
}
"\n"을 같이 안써주고 bw.newLine(); 쓰니까 결과로 이상한 특수문자 같은게 나온다.
https://okky.kr/articles/347284
OKKY - BufferedWriter newline() 관련 질문 드립니다.
테스트 파일 생성 관련해서 작업을 진행하고있는데요, 제 로컬은 윈도우 이며, 실제 프로젝트가 구동되는 곳은 리눅스로 되어있습니다. 다름이 아니라 BufferedWriter 를 사용해서 txt 파일을 생성하
okky.kr
http://oniondev.egloos.com/9767037
[줄바꿈 문자 (newline character)] Linux의 LF (\n) 와 Windows의 CRLF (\r\n) 그 차이를 알아보자
윈도우와 리눅스 환경을 넘나들면서 개발을 하다보면 가끔 알수없는 오류로 인해 곤란을 겪을때가 허다하다. 그중 하나가 !!! 바로 서로다른 줄바꿈 문자... -ㅅ- 단순히 텍스트 파일을 읽거나 저
oniondev.egloos.com
https://ko.wikipedia.org/wiki/%EC%83%88%EC%A4%84_%EB%AC%B8%EC%9E%90
새줄 문자 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. "Hello"와 "world" 단어 사이에 추가된 새 줄 새줄 문자(newline)는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다. 개행 문자, 줄바꿈 문자(line break), EOL(end-
ko.wikipedia.org
뭐 이렇다는데 쓰던대로 "\n" 써야겠다.