[백준/JAVA] - 반복문(1~6번)
👉 백준 반복문 https://www.acmicpc.net/step/3
백준 단계별로 풀어보기 3단계 - 반복문(1~6번) 입니다.
어려운 문제는 없으니 화이팅 🔥🔥
1. 구구단 (2739번)

https://www.acmicpc.net/problem/2739
N을 입력받고 N단을 출력해주면 되는 문제이다.
for문으로 1부터 9까지 돌려주면 된다.
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//입력
int n = sc.nextInt();
//출력
for(int i = 1; i <= 9; i++){
System.out.println(n + " * " + i + " = " + (n*i));
}
}
}
-
Java (BufferedReader)
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));
//입력
int n = Integer.parseInt(br.readLine());
//출력
for(int i = 1; i <= 9; i++){
System.out.println(n + " * " + i + " = " + (n*i));
}
}
}

제출 번호 68377245 - BufferedReader (156ms)
제출 번호 68377157 - Scanner (236ms)
for문으로 n * 1 ~ n * 9 를 출력해주면 된다.
딱히 설명할게 없는 문제이다.
2. A+B - 3 (10950번)

https://www.acmicpc.net/problem/10950
입력받은 테스트 케이스(T) 만큼 A+B 를 반복해주면 된다.
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//입력
int T = sc.nextInt();
//출력
for(int i = 0; i < T; i++){
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
}
}
}
-
Java (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));
StringTokenizer st;
//입력
int T = Integer.parseInt(br.readLine());
//출력
for(int i = 0; i < T; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a + b);
}
}
}

제출 번호 68380617 - BufferedReader (132ms)
제출 번호 68380615 - Scanner (236ms)
테스트 케이스 만큼 반복해서 출력하면 된다!
3. 합 (8393번)

https://www.acmicpc.net/problem/8393
1부터 n까지 모두 더한 값을 출력해주면 된다.
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//입력
int n = sc.nextInt();
int total = 0;
for(int i = 1; i <= n; i++){
total += i;
}
//출력
System.out.println(total);
}
}
-
Java(BufferedReader)
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));
//입력
int n = Integer.parseInt(br.readLine());
int total =0;
for(int i = 1; i<=n; i++){
total += i;
}
//출력
System.out.println(total);
}
}

제출 번호 68380878 - BufferedReader (124ms)
제출 번호 68380875 - Scanner (212ms)
1부터 n까지 for문을 이용해서 모두 더해주면 된다 !
4. 영수증 (25304번)

https://www.acmicpc.net/problem/25304
영수증에 적힌 금액과 실제 나온 금액이 일치하는지 비교해서 Yes 또는 No 를 출력하면 된다.
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//입력
int X = sc.nextInt();
int N = sc.nextInt();
int total = 0;
for(int i = 0; i < N; i++){
int a = sc.nextInt();
int b = sc.nextInt();
total += a * b; //실제 계산 결과
}
//영수증 금액과 실제 금액 비교 후 출력
if(X == total){
System.out.println("Yes");
}
else{
System.out.println("No");
}
}
}
-
Java (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));
StringTokenizer st;
//입력
int X = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
int total = 0;
for(int i = 0; i < N; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
total += a * b; //실제 계산 결과
}
//영수증 금액과 실제 금액 비교 후 출력
if(X == total){
System.out.println("Yes");
}
else{
System.out.println("No");
}
}
}

제출 번호 68381200 - BufferedReader + StringTokenizer (128ms)
제출 번호 68381197 - Scanner (228ms)
for문으로 각 물건의 총 금액을 누적한 값(total)을
영수증에 쓰인 금액(X)와 비교해서 출력해주면 되는 문제였다.
5. 코딩은 체육과목 입니다 (25314번)

https://www.acmicpc.net/problem/25314
n바이트를 입력받아서
4바이트 당 long 1개를 붙여서 출력해주면 된다.
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
//입력
int N = sc.nextInt();
//4바이트 단위당 long이 하나씩 늘어남
N /= 4;
//4로 나눈 몫 만큼 long 추가
for(int i = 0 ; i < N; i++){
sb.append("long ");
}
sb.append("int");
//출력
System.out.println(sb);
}
}
4바이트 당 long을 하나씩 추가해야 하기 때문에
N을 4로 나눈 몫만큼 long을 추가해 주면 된다.
여기서 print를 여러 번 쓰는 방법도 있지만, 그렇게 하면 성능이 좋지 않다.
Java에는 StringBuilder를 이용해서 문자열을 연결할 수 있다.
append() 메소드를 이용해 “long “ 을 더해서 한 번에 출력해주면 된다!!
-
Java (BufferedReader)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
//입력
int N = Integer.parseInt(br.readLine());
//4바이트 단위당 long이 하나씩 늘어남
N /= 4;
//4로 나눈 몫 만큼 long 추가
for(int i = 0 ; i < N; i++){
sb.append("long ");
}
sb.append("int");
//출력
System.out.println(sb);
}
}

제출 번호 68381691 - BufferedReader (124ms)
제출 번호 68381690 - Scanner (212ms)
6. 빠른 A+B (15552번)

그냥 A + B 를 출력해주면 되는 것 같지만
1.5초(1500ms)라는 제한 시간이 있다.
Scanner와 같은 일반적인 방식을 사용하면 시간초과가 된다.
BufferedReader를 사용해서 문제를 풀면 된다.
Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
//입력
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(a + b).append('\n');
}
//출력
System.out.print(sb);
}
}

제출 번호 68381930 - BufferedReader + StringTokenizer (824ms)
제출 번호 68381922 - Scanner (시간 초과)
테스트 케이스가 정말정말 많기 때문에
위의 결과 처럼 Scanner를 사용하면 시간 초과가 뜬다.
따라서 더 빠른 방법인 BufferedReader를 써야 한다.
BufferedReader가 더 빠른 이유는 예전에 간단히 설명한 글을 보면 이해가 될 것이다.
![]()
끝 !!
댓글남기기