백준 문제 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 번
이 문제는 입력 값이 총 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배 이상 속도가 증가한 것을 확인할 수 있다.
'Code > baekjoon [ 단계별 ]' 카테고리의 다른 글
백준 단계별 문제 <함수> (0) | 2022.02.20 |
---|---|
백준 단계별 문제 <배열> (0) | 2022.02.19 |
백준 단계별 문제 <1차원 배열> (0) | 2022.02.16 |
백준 단계별 문제 <if문 > (0) | 2022.01.20 |
백준 단계별 문제 < 입출력 > (0) | 2022.01.12 |