코딩테스트 & 알고리즘 및 기타/백준_알고리즘 - 단계별 풀이

[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단계로 돌아오겠습니다~~⭐⭐