백준 - 3단계 반복문

이상훈·2023년 3월 3일
0

2739번

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int Num = sc.nextInt();
        
        for (int i=1; i<10; i++) {
            System.out.println(Num+" * "+i+" = "+(Num*i));
        }
    }
}

i를 출력해야하는 상황이라면 i=1 로해주자

10950번

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int Num = Integer.parseInt(bf.readLine());
        
        for (int i = 0; i<Num; i++) {
            StringTokenizer st = new StringTokenizer(bf.readLine());
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
            System.out.println(A+B);
        }
    }
}

입력받은 수만큼 반복하고 싶다면 변수로 포장해서 i<Num 이렇게 활용하자

8393번

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int Num = sc.nextInt();
        
        int Sum=0;
        for (int i =1; i<=Num; i++) {
            Sum+=i;
        }
        System.out.println(Sum);
    }
}

25304번

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int Sum = Integer.parseInt(bf.readLine());
        int Num = Integer.parseInt(bf.readLine());
        int checkNum = 0;
        for (int i = 0; i<Num; i++) {
            StringTokenizer st = new StringTokenizer(bf.readLine());
            int price = Integer.parseInt(st.nextToken());
            int count = Integer.parseInt(st.nextToken());
            
            checkNum+=price*count;
        }
        if (Sum==checkNum) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
}

25314번

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int Num = sc.nextInt();
        
        for (int i = 0; i<Num/4; i++) {
            System.out.print("long ");
        }
        System.out.print("int");
    }
}

15552번

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int Num = Integer.parseInt(bf.readLine());
        
        for (int i = 0; i<Num; i++) {
            StringTokenizer st = new StringTokenizer(bf.readLine());
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());

//			System.out.println(A+B); // 시간초과남
			bw.write(A+B+"\n");
//			bw.flush(); // 나머지 전부출력
		}
		bw.close();

    }
}

시간복잡도를 고려해서 푸는 문제다. 보통의 Scanner와 System.out.println으로는 통과할 수 없다. BufferedReader와 BufferedWriter를 사용해야 한다.
bw.write(A+B+"\n"); 에서 +"\n"를 무조건 사용해야한다.

11021번

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int count = Integer.parseInt(bf.readLine());
        
        for (int i = 1; i<=count; i++) {
            st = new StringTokenizer(bf.readLine());
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
            
            System.out.println("Case #"+i+": "+(A+B));
        }
    }
}

위 코드와 같이 StringTokenizer st; 를 선언해주고 따로 사용하자

11022번

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int count = Integer.parseInt(bf.readLine());

		for (int i = 1; i<=count; i++) {
			st = new StringTokenizer(bf.readLine());
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());

			System.out.println("Case #"+i+": "+A+" + "+B+" = "+(A+B));
		}
	}
}

2438번

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int count = sc.nextInt();

		for (int i = 1; i<=count; i++) {
			for (int j = 1; j<=i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

2439번

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int count = sc.nextInt();

		for (int i = 1; i<=count; i++) {
            for (int z = count; z>i; z--) {
				System.out.print(" ");
			}
			for (int j = 1; j<=i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

별찍기는 첫번째 반복문에서 몇줄인가 나타내고 두번째 반복문에서 내부 구성을 하는데 print로 이어주고, 여러 반복문으로 나열되어 결합될 수 있다. 반복조건을 구성할때 반드시 첫번째 반복문의 i를 사용해야 한다.

10952번

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        while (true) {
            st = new StringTokenizer(bf.readLine());
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
            
            if (A==0 && B==0) {
                break;
            } else {
                System.out.println(A+B);

            }
        }
    }
}

break; 사용
while (true) {} 무한루프

10951번

// Scanner 사용
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNextInt()) {
			int A = sc.nextInt();
			int B = sc.nextInt();
			System.out.println(A+B);
		}
	}

}
// BufferedReader + StringTokenizer 사용
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String args[]) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		String str;
 
		while( (str=br.readLine()) != null ){
		    
			st = new StringTokenizer(str," ");
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			sb.append(a+b).append("\n");
		
		}
		System.out.print(sb);
	}
}
// BufferedReader + String.charAt() 사용
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
	public static void main(String args[]) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		String str;
 
		while( (str=br.readLine()) != null ){
		    
			int a = str.charAt(0) - 48;
			int b = str.charAt(2) - 48;
			sb.append(a+b).append("\n");
		
		}
		System.out.print(sb);
	}
}

EOF

이 문제에서 가장 중요한 점이 파일 종료 조건이 없이 그냥 입력이 주어졌다는 것이다.

즉 입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하라는 것이다.

이렇게 데이터가 더이상 존재하지 않을 때 우리는 EOF (End of File) 즉, 파일의 끝이라 한다.

0개의 댓글