4 분 소요

👉 백준 반복문 https://www.acmicpc.net/step/3


백준 단계별로 풀어보기 3단계 - 반복문(1~6번) 입니다.

어려운 문제는 없으니 화이팅 🔥🔥


1. 구구단 (2739번)

image-20231023223258166

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));
    }
  }
}

image-20231023233612972

제출 번호 68377245 - BufferedReader (156ms)

제출 번호 68377157 - Scanner (236ms)

for문으로 n * 1 ~ n * 9 를 출력해주면 된다.

딱히 설명할게 없는 문제이다.


2. A+B - 3 (10950번)

image-20231023233833667

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);
    }
  }
}

image-20231024010803054

제출 번호 68380617 - BufferedReader (132ms)

제출 번호 68380615 - Scanner (236ms)

테스트 케이스 만큼 반복해서 출력하면 된다!


3. 합 (8393번)

image-20231024011122808

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);
  }
}

image-20231024011904440

제출 번호 68380878 - BufferedReader (124ms)

제출 번호 68380875 - Scanner (212ms)

1부터 n까지 for문을 이용해서 모두 더해주면 된다 !


4. 영수증 (25304번)

image-20231024012058503

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");
    }
  }
}

image-20231024013751602

제출 번호 68381200 - BufferedReader + StringTokenizer (128ms)

제출 번호 68381197 - Scanner (228ms)

for문으로 각 물건의 총 금액을 누적한 값(total)

영수증에 쓰인 금액(X)와 비교해서 출력해주면 되는 문제였다.


5. 코딩은 체육과목 입니다 (25314번)

image-20231024014743084

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);
  }
}

image-20231024020901186

제출 번호 68381691 - BufferedReader (124ms)

제출 번호 68381690 - Scanner (212ms)


6. 빠른 A+B (15552번)

image-20231024021108682

그냥 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);
  }
}

image-20231024022626950

제출 번호 68381930 - BufferedReader + StringTokenizer (824ms)

제출 번호 68381922 - Scanner (시간 초과)


테스트 케이스가 정말정말 많기 때문에

위의 결과 처럼 Scanner를 사용하면 시간 초과가 뜬다.

따라서 더 빠른 방법인 BufferedReader를 써야 한다.

👉왜 BufferedReader 가 왜 빠를까….?

BufferedReader가 더 빠른 이유는 예전에 간단히 설명한 글을 보면 이해가 될 것이다.


thumbdochi

끝 !!

댓글남기기