6 분 소요

👉 백준 입출력과 사칙연산 https://www.acmicpc.net/step/1


백준 단계별로 풀어보기 1단계 -입출력과 사칙연산 (6~13) 입니다!

지난번에 이어서 6번 부터 시작하겠습니다 :)

문제 수가 많다보니 오늘은 좀 글이 길 예정입니다 😭

nongdam_gabojago

그럼 가볼까요?


6. 사칙연산 (10869번)

image-20230929220203907

https://www.acmicpc.net/problem/10869

두 수 A, B를 입력받아 한 줄에 하나씩 덧셈, 뺄셈, 곱셈, 몫, 나머지를 출력해주면 된다.

나머지 연산은 %로 한다. 앞으로 엄청 많이 쓰일 예정이다.


Java (Scanner)

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //입력
    int A = sc.nextInt();
    int B = sc.nextInt();
    //출력
    System.out.println(A + B);
    System.out.println(A - B);
    System.out.println(A * B);
    System.out.println(A / B);
    System.out.println(A % B);
  }
}

image-20230929221544628

before

결과가 잘 나온다 하지만 어딘가 불편하다🤔

더 빠르게 해야한다!!

그럴때는?

-

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 = new StringTokenizer(br.readLine());
    //입력
    int A = Integer.parseInt(st.nextToken());
    int B = Integer.parseInt(st.nextToken());
    //출력
    System.out.println(A + B);
    System.out.println(A - B);
    System.out.println(A * B);
    System.out.println(A / B);
    System.out.println(A % B);
  }
}

image-20230929221609963

after

방금 전보다 더 빨라져서 정말 편안하다.


7. ??! (10926)

image-20230929223318336

https://www.acmicpc.net/problem/10926

입력받은 문자열에 ??!을 붙여서 출력해주면 된다!


Java (Scanner)

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //입력
    String str = sc.nextLine();
    //출력
    System.out.println(str + "??!");
  }
}

ScannernextLine() 메소드는 엔터를 입력하기 전까지의 문자열을 리턴한다.

자바에서는 문자열과 문자열을 더하는 연산을 해주면

두 문자열을 붙여서 출력해준다 !!

정말 편리하다!!

-

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));
    //입력
    String str = br.readLine();
    //출력
    System.out.println(str + "??!");
  }
}

image-20230929224454404

제출 번호 67336000 - BufferedReader (128ms)

제출 번호 67335664 - Scanner (212ms)

역시 BufferedReader가 더 빠르다 !!


8. 1998년생인 내가 태국에서는 2541년생?! (18108번)

image-20230930225628564

https://www.acmicpc.net/problem/18108

처음에 봤을 때는 문제가 이해되지 않았다.

그러나 생각보다 엄청 쉬운 문제였다!!

입력된 연도에서 543을 빼주기만 하면 된다.


Java (Scanner)

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc= new Scanner(System.in);
    //입력
    int year = sc.nextInt();
    //출력
    System.out.println(year - 543);
  }
}

-

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));
    //입력
    int year = Integer.parseInt(br.readLine());
    //출력
    System.out.println(year - 543);
  }
}

image-20230930231356515

제출번호 67371054 - BufferedReader (128ms)

제출번호 67371046 - Scanner (204ms)

입력받은 연도에 543을 빼주기만 하면 되는 간단한 문제였다.


9. 나머지 (10430번)

image-20230930231716283

https://www.acmicpc.net/problem/10430

세 수 A, B, C를 입력받아서

(A + B) % C

((A % C) + (B % C)) % C

(A * B) % C

((A % C) * (B % C)) % C

위와 같이 계산한 값을 한 줄에 하나씩 출력해주면 된다.


Java (Scanner)

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //입력
    int A = sc.nextInt();
    int B = sc.nextInt();
    int C = sc.nextInt();
    //출력
    System.out.println((A + B) % C);
    System.out.println(((A % C) + (B % C)) % C);
    System.out.println((A * B) % C);
    System.out.println(((A % C) * (B % C) % C));
  }
}

Java (BufferedReader + StringTokenizer)

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 = new StringTokenizer(br.readLine());
    //입력
    int A = Integer.parseInt(st.nextToken());
    int B = Integer.parseInt(st.nextToken());
    int C = Integer.parseInt(st.nextToken());
    //출력
    System.out.println((A + B) % C);
    System.out.println(((A % C) + (B % C)) % C);
    System.out.println((A * B) % C);
    System.out.println(((A % C) * (B % C) % C));
  }
}

세 수를 공백(spacebar)을 기준으로 나눠서 입력받아야 하기 때문에 StringTokenizer를 사용하였다.

image-20231001232007956

제출 번호 67406047 - BufferedReader + StringTokenizer (124ms)

제출 번호 67406044 - Scanner (208ms)


10. 곱셈 (2588번)

image-20231001224742819

https://www.acmicpc.net/problem/2588

지금까지 풀었던 문제들 보다 난이도가 조금 올라갔다.

입력받은 첫 번째 값두 번째 값1, 10, 100의 자리를 곱한 값을 출력해 주어야 한다.

(3)에는 472 * 5, (4)에는 472 * 8, (5)에는 472 * 3 를 출력하면 된다.

그리고 마지막 줄에는 입력받은 두 수를 곱한 값을 출력해주면 된다.

그럼 두 번째 수의 1, 10, 100의 자리 수는 어떻게 추출하면 될까?

코드를 보면서 이해해보자


Java (Scanner)

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //입력
    int a = sc.nextInt();
    int b = sc.nextInt();
    //출력
    System.out.println(a * (b % 10));
    System.out.println(a * (b % 100 / 10));
    System.out.println(a * (b / 100));
    System.out.println(a * b);
  }
}

두 번째 수를 385라고 생각하고 풀어보자

1의 자리는 10을 나머지 연산한 값이다.

385 % 10 = 5

10의 자리는 100을 나머지 연산한 값에 10을 나눈 몫이다.

385 % 100 = 85

85 / 10 = 8

100의 자리는 100을 나눈 몫이다.

385 / 100 = 3

이렇게 나머지 연산과 몫을 잘 활용해주면 된다!

-

Java (StringTokenizer)

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));
    //입력
    int a = Integer.parseInt(br.readLine());
    int b = Integer.parseInt(br.readLine());
    //출력
    System.out.println(a * (b % 10));
    System.out.println(a * (b % 100 / 10));
    System.out.println(a * (b / 100));
    System.out.println(a * b);
  }
}

입력받을 떄 개행문자를 기준으로 입력받기 때문에

BufferedReader만 사용했다.

나머지는 Scanner와 같다!

image-20231001231831463

제출 번호 67405957 - BufferedReader (120ms)

제출 번호 67405950 - Scanner (208ms)


11. 꼬마 정민 (11382번)

image-20231001232427170

https://www.acmicpc.net/problem/11382

세 수를 입력받아 모두 더한 값을 출력해주면 되는 쉬운 문제이다.

그런데 주의할 점이 있다 !

입력 값의 범위를 잘 보자

1 <= A, B, C <= 10^12 이다.

10의 12승 (1조)인 매우 큰 값이다.

int형의 크기(unsigned int 기준 약 42억)보다 훨씬 큰 값이다.

그래서 이를 담기 위한 변수를 선언할 때 long 으로 선언하면 된다!


Java (Scanner)

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //변수 초기화
    long result = 0;
    //입력 및 더한 값 저장
    for(int i = 0; i < 3; i++){
      result += sc.nextLong();
    }
    //출력
    System.out.println(result);
  }
}

입력과 더하는 것을 3번이나 입력하기 귀찮으니

for문으로 입력과 동시에 변수에 더해줬다.

Long으로 입력받으니 nextLong() 메소드를 사용하면 된다 :)

-

Java (BufferedReader + StringTokenizer)

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 = new StringTokenizer(br.readLine());
    //변수 초기화
    long result = 0;
    //입력 및 더한 값 저장
    for(int i = 0; i < 3; i++){
      result += Long.parseLong(st.nextToken());
    }
    //출력
    System.out.println(result);
  }
}

Long으로 입력받으니 parseInt 대신 parseLong을 사용하면 된다 !!

image-20231001234414013

제출 번호 67406990 - BufferedReader + StringTokenizer (120ms)

제출 번호 67406952 - Scanner (216ms)

이처럼 입력 값의 범위를 잘 확인해야 하는 문제들이 있다!

그리고 변수 초기화 하는 것을 습관화 하자 !!


12. 고양이 (10171번)

image-20231001235213446

https://www.acmicpc.net/problem/10171

이스케이프 문자를 적절히 활용해서 귀여운 고양이를 출력하면 된다!

하지만 역슬래쉬(\)는 그냥 출력이 불가능하다

\\ 이렇게 역슬래쉬(\) + \ 로 쓰면 출력이 가능하다!

이를 적절히 이용하면 된다.


Java

public class Main {
  public static void main(String[] args) {
      System.out.println("\\    /\\");
      System.out.println(" )  ( ')");
      System.out.println("(  /  )");
      System.out.println(" \\(__)|");    
  }
}

위처럼 역슬래쉬를 출력할 때는 \\ 처럼 쓰면 된다 :)

image-20231002000541648

1633611476200

귀여운 고양이를 보며 머리를 식혀보자🐈


13. 개 (10172번)

image-20231002001030829

https://www.acmicpc.net/problem/10172

고양이 문제처럼 이스케이프 문을 잘 활용해서 강아지를 출력해주면 된다!

따옴표를 출력할 때는 \” 처럼 해주면 된다.


Java

public class Main {
  public static void main(String[] args) {
    
    System.out.println("|\\_/|");
    System.out.println("|q p|   /}");
    System.out.println("( 0 )\"\"\"\\");
    System.out.println("|\"^\"`    |");
    System.out.println("||_/=\\\\__|");

  }
}

image-20231002001443374

위처럼 따옴표를 출력할 때는 \” 로 해주면 된다.

pome

강아지 사진은 코딩에 이롭다🐕


마치며

이렇게 단계별로 풀어보기 - 입출력과 사칙연산 을 모두 풀어보았다!

기본 계산 문제랑 입출력 파트라 지루했을 수도 있지만,

다음 파트에는 조건문이라는 재미난 친구가 기다리고 있다 !!

kXqsWvXJi

긴 글 읽어주셔서 정말 감사합니다 ☺☺

즐거운 연휴가 되셨길 바랍니다 !! 다들 화이팅 🔥🔥

댓글남기기