본문 바로가기
Code/baekjoon [ 단계별 ]

백준 단계별 문제 <for문>

by jaeaemin 2022. 2. 14.

 

백준 문제 2438 번

풀었던 코드

import java.util.*;
public class Test_1 {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=0;i<=n;i++){
            for(int j=i;j>0;j--){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

이중 for문으로 구현했지만, 이 경우에는 두번째 for문의 변수를 복사하는 것보다

(int j=0; j<i; j++)가 더 클린코드에 가까울 것 같다.  

 

 

 

 

 

 

 

백준 문제 2439 번

 

import java.util.*;
public class Test_1 {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int blank_step = n-1;

        for(int i=1; i<=n; i++){
            for(int j=0; j<blank_step; j++){
                System.out.print(" ");
            }
            for(int k=0; k<i; k++){
                System.out.print("*");
            }
            System.out.println();
            blank_step--;
        }
    }
}

별 표시할 숫자형 변수와, blank를 표시할 숫자형 변수 2개를 이용하여 

문제를 해결햇다. 

최대한 이해하기 편하게 풀어서 코드를 설계할려고 했는데 오히려 코드가 쓸데없이 길어진 것 같아서

차라리 for문 안에서 연산을 모두 수행하여 밑의 코드처럼 구현하는게 더 직관적이고 이해하기 쉬울 것 같다.

 

for ( int i = 1 ; i <= N ; i++ ){
	for( int j = 1 ; j <= N-i ; j++ ) {
		print(" ");
	}
	for( int k = 1 ; k <= i ; k++ ){
		print("*");
	}
	print('\n');
}

 

 

 

 

 

 

백준 문제 10871 번

 

ㅇd

이 문제는 입력 값이 총 3개가 주어진다.

2개는 정수형 데이터 , 1개는 일련의 정수형 데이터로 이를 해결하기 위해

2가지 방법을 사용하여서 풀었다 !

 

 

 

 

1번째 방법 : 단순히 Scanner를 통해 Int형을 구분하여 변수를 할당시키면서 검사한 예제

n과 x를 입력 받은 뒤,

tmp를 통해서  반복문을 돌리면서 각 정수가 조건에 해당하는 정수면 출력하고 , 그렇지 않으면 패스한다.

import java.util.*;
public class Test_1 {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int x = sc.nextInt();
        for(int i=0; i<n; i++){
            int tmp = sc.nextInt();
            if(tmp<x){
                System.out.print(tmp+" ");
            }
        }
    }
}

 

 

 

 

 

2번째 방법 : BufferReader를 사용한 방법 

이 방법은 BuffreedReader를 이용해서 풀었다. 

먼저 버퍼리더로 읽어 들어온다음, StringTokenizer를 이용해서 int형 2개를 분리하여

N과 비교할 숫자 X를 구분하여서 읽은 뒤 

수열에 대해서 각 수열 하나씩 읽어들이면서, 비교한 뒤 조건에 맞으면 새로운 StringBuilder에 추가한다.

그 뒤, StringBuilder를 출력시켜서 조건에 맞아 새로 추가된 수열을 출력한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer
public class Test_1 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(st.nextToken());
        int x = Integer.parseInt(st.nextToken());
        
        StringBuilder sb = new StringBuilder();
        st = new StringTokenizer(br.readLine(), " ");

        for(int i=0; i<n; i++){
            int tmp_x = Integer.parseInt(st.nextToken());

            if (tmp_x < x) sb.append(tmp_x).append(' ');
        }
        System.out.println(sb);

    }
}

 

 

 

 

이 2가지 방법을 이용한 걸 분석하면 

 

Sccaner를 사용한 경우 메모리 사용은 작지만, 시간적인 부분에서는 크게 늘어난 것을 확인할 수 있다.

BufferReader를 사용한 경우는 메모리 사용은 크지만, 시간적인 부분은 3배 이상 속도가 증가한 것을 확인할 수 있다.

 

 

 

 

 

 

반응형