코딩테스트 & 알고리즘 및 기타/백준_알고리즘 - 단계별 풀이
[Java, 자바] 백준 알고리즘 - 단계별 풀기 (3단계)
정데브
2021. 5. 15. 16:26
3단계 for를 이용한 출력 문제
2739번
- N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
- 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.
package step3;
import java.util.Scanner;
public class NO_1 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in); //스캐너를 통해서 데이터 입력받음
int n=in.nextInt(); //몇단을 출력할 것인지 입력받음
for(int i=1;i<=9;i++) { //for문을 통해서 n단의 구구단을 출력
System.out.println(n+" * "+i+" = "+n*i);
}
}
}
10950번
- 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
package step3;
import java.util.Scanner;
public class NO_2 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int T=in.nextInt(); //몇개를 더할것인지
for(int i=1;i<=T;i++) {
int a=in.nextInt();
int b=in.nextInt();
System.out.println(a+b);
}
}
}
8393번
- n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
package step3;
import java.util.Scanner;
public class NO_3 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int n=in.nextInt(); //1부터 몇까지 더할껀지
int sum=0;
for(int i=1;i<=n;i++) {
sum+=i;
}
System.out.println(sum);
}
}
1552번
- 두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.
package step3;
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 NO_4 {
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()); //몇번의 덧셈을 진행할 것인지 데이터를 입력받음
//라인으로 입력받은 데이터를 int형으로 n변수에 담음
StringTokenizer st; //StringTokenizer 사용 선언
for(int i=0;i<N;i++) { // n=5 / 5번 줄에 걸쳐서 데이터를 입력받음
st =new StringTokenizer(br.readLine()," ");
//입력받은 데이터를 StringTokenizer을 통해서 " " (스페이스바)로 구분하여 st에 넣음
bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
//st안에 들어있는 데이터를 nextToken()을 통해서 하나씩 출력함
}
br.close();
bw.flush();
br.close();
}
}
2741번
- 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
package step3;
import java.util.Scanner;
public class NO_5 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int data=in.nextInt();
for(int i=1;i<=data;i++) {
System.out.println(i);
}
}
}
2742번
- 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오
package step3;
import java.util.Scanner;
public class NO_6 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int data=in.nextInt();
for(int i=data;i>0;i--) {
System.out.println(i);
}
}
}
11021번
- 두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.
<Scanner version>
package step3;
import java.util.Scanner;
public class NO_7 {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int data=in.nextInt();
for(int i=1;i<data+1;i++) {
int a=in.nextInt();
int b=in.nextInt();
System.out.println("Case #"+i+": "+(a+b));
}
}
}
<Buffer version>
package step3;
import java.io.*;
import java.util.StringTokenizer;
public class NO_7_1 {
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader (new InputStreamReader(System.in));
int data=Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i=1;i<=data;i++) {
st=new StringTokenizer(br.readLine()," ");
System.out.println("Case #"+i+": "
+(Integer.parseInt(st.nextToken())
+Integer.parseInt(st.nextToken())));
}
br.close();
}
}
11022번
- 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
- 각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.
package step3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class NO_8 {
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader (new InputStreamReader(System.in));
int data=Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i=1;i<=data;i++) {
st=new StringTokenizer(br.readLine()," ");
int A=Integer.parseInt(st.nextToken());
int B=Integer.parseInt(st.nextToken());
System.out.println("Case #"+i+": "+A+" + "+B+" = "+(A+B));
}
br.close();
}
}
2438번
- 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
<Scanner version>
package step3;
import java.util.Scanner;
public class NO_9_1 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int n=in.nextInt(); //몇번째 줄까지 별을 찍을 것인지
for(int i=0;i<n;i++) { //줄에 대한 for
for(int j=0;j<=i;j++) //별에 대한 for
System.out.print("*"); //i줄일때 i개만큼 별을 찍기위함 /j(별)이 i개수 만큼 찍힘
System.out.println(); //줄이 끝났을때 줄바꿈
}
}
}
<Buffer version>
package step3;
import java.io.*;
public class NO_9 {
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=0;i<N;i++) {
for(int j=0;j<=i;j++) {
bw.write("*");
}
bw.write("\n");
}
bw.flush();
bw.close();
}
}
2439번
- 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
- 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
package step3;
import java.io.*;
public class NO_10_1 {
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 <= N; i++) {
for(int j = 1; j <= N - i; j++) {
bw.write(" "); //입력된 N값에서 i를 뺀 만큼 " " 공백 출력
}
for(int j = 1; j <= i; j++) {
bw.write("*"); //별은 i보다 작거나 같을때까지 출력
}
bw.write("\n");
}
bw.flush();
bw.close();
}
}
10871번
- 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
- X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.
<Scanner version>
package step3;
import java.util.Scanner;
public class NO_11 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int x=in.nextInt();
String str=in.nextLine();
String []st=str.split(" ");
for(int i=0;i<n;i++) {
if(Integer.parseInt(st[i])<x) { //입력된 n개의 데이터를 기준 x와 비교하여 클경우 출력
System.out.print(st[i]);
}
}
}
}
<Buffer version>
package step3;
import java.io.*;
import java.util.StringTokenizer;
public class NO_11_1 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader (new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st=new StringTokenizer(br.readLine()," ");
int N=Integer.parseInt(st.nextToken()); //몇개를 비교할건지
int X=Integer.parseInt(st.nextToken()); // x의 기준 수
st=new StringTokenizer(br.readLine()," ");
for(int i=0;i<N;i++) {
int a=Integer.parseInt(st.nextToken());
if(a<X) {
bw.write(a+" ");
}
}
bw.flush();
}
}
알고리즘 문제를 풀다보면 Scanner와 Buffer를 번갈아가면서 사용하게 되는데요! 작은 데이터를 넣고 출력하는것은 스캐너가 확실이 편하고 코드도 짧지만 다소 많은 데이터를 넣고 빼고 하기엔 속도가 매우 늦음을 알 수 있어요ㅠㅠ 실제로 백준 알고리즘 문제를 2가지 방식으로 재출할 경우 속도차이가 난답니다!! 지금도 몇줄 안되는 코드로 속도차이가 나는데 나중에 몇백줄의 코딩을 한 후 실행했을때는 그 속도차이가 엄청나게 느껴지겠죠?!!
아래가 스캐너 / 위에는 버퍼로 푼 문제입니다! 속도차이 보이시나요?! 짧은 코드에서도 2배이상의 속도차이를 보여주고있습니다! 차근차근 스캐너보다는 버퍼를 사용해서 데이터를 입력 / 출력하시는걸 연습해보심 좋을거 같아요!!
지금까지 백준 단계별 풀이 3단계에 대한 설명이였습니다! 다음에는 4단계로 돌아오겠습니다~~⭐⭐