* 공부 목표
입출력 - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992
- 2741번
문) 자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.close();
for(int i=1; i<N+1; i++) {
System.out.println(i);
}
}
}
- 2742번
문) 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
** 출력의 순서가 N부터인 내림차순 정렬이다.
1) Scanner 활용
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.close();
while(N>0) {
System.out.println(N);
N--;
}
}
}
2) BufferReader 활용(모범 답안(?)). // 코드 길이는 조금 더 길었지만, 메모리와 시간 측면에서 훨씬 나았다.
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
br.close();
while(N>0) {
System.out.println(N);
N--;
}
}
}
▶ BufferedReader 썼을 때 훨씬 빠르구나.
▶ BufferedReader + System.out.println() 조합이었는데,
BufferedReader + BufferedWirter() 조합이 가장 빠르고 메모리 소모도 덜 함.
- 하나하나 print 메소드 출력이 아니라, 한번에 모아서 출력하는 것이기 때문.
▶ 그치만, 아직 bufferedReader 사용에 익숙치 않으므로,
선 Scanner 후 BufferedReader 형식의 연습이 필요할 것으로 보임.
- 2739번
문) N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
1) Scanner 활용 // 메모리-시간 가장 많이, 가장 오래 잡아먹음.
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.close();
for(int i=1; i<10; i++) {
System.out.println(N + " * " + i + " = " + N*i);
}
}
}
2) bufferedReader + System.out.println() //메모리는 가장 적게, 시간은 2번째.
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
br.close();
for(int i=1; i<10; i++) {
System.out.println(N + " * " + i + " = " + N*i);
}
}
}
3) bufferedReader + bufferedWriter() //메모리는 2번째, 시간은 가장 빠름.
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
br.close();
for(int i=1; i<10; i++) {
bw.write(N + " * " + i + " = " + N*i + "\n");
}
bw.flush();
bw.close();
}
}
** bufferedReader 사용법
0. 클래스 import와 throws IOException 작성 필수.
1. 변수 입력
String 변수 입력 받을 때는 .readLine();
int 변수는? Integer.parseInt(br.readLine());
▶ .read(); 도 있지만 이는 int 값으로 변형하여 읽어오는 방식.
(ex) 1 이라는 수를 int 1로 가져오는 것 아님. 아스키 값의 1 읽어옴(int, 49).
▶ 따라서 형변환 하여 입력 받는 게 낫다.^^
2. 엔터 단위(Line 단위)로만 데이터가 쪼개진다.
- 공백 단위로 가공하려면 추가 작업 필요하다.
** bufferedWriter
1. 자동 개행 기능 없다. \n 붙여줘야 한다.
- .write( +"\n"); // 버퍼 있는 값 전부 출력.
2. flush()와 close()를 반드시 호출해야 한다.
- .flush(); // 남은 데이터 모두 출력.
- .close(); // 스트림 종료.
[참고] https://st-lab.tistory.com/32
'알고리즘' 카테고리의 다른 글
[백준] 입출력 - 8393 (0) | 2023.02.09 |
---|---|
[백준] 입출력 - 1924, 달력 **(서칭) (0) | 2023.02.08 |
[백준] 입출력 - 11721번, 열 개씩 끊어 출력. charAt(); (1) | 2023.01.20 |
[백준] 입출력 - 11720번(서칭), 숫자의 합. (0) | 2023.01.18 |
[백준] 입출력 - 11719. 그대로 입력. (0) | 2023.01.17 |