알고리즘 풀이

백준 10430 java 풀이

코디드 2023. 2. 12. 21:07

예전에 풀어봤던 간단한 문제인데 과거에 풀 때랑 다르게 어떤 방식을 쓸지 궁금해서 몸을 풀겸 풀어봤다.

 

 

예전 풀이)

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" 써야겠다.