본문 바로가기
CODING TEST/BOJ

[Java] 문제 001(백준: 11720번)

by 정성인(人) 2024. 2. 14.

문제


숫자의 합 구하기(Baekjoon: 11720번)

풀이


import java.util.Scanner;

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

    // String 변수로 받아 문자 배열로 변환하기
    String sNum = sc.next();
    char[] cNum = sNum.toCharArray();

    int sum = 0;
    for (int i = 0; i < n; i++) {
      // 문자 값을 정수 형으로 변환하여 더해주기
      sum += cNum[i] - '0';
    }
    System.out.print(sum);
  }
}

설명


개요

n의 범위가 1~100이므로, int형, long형과 같은 숫자형으로 담으려면, 범위가 초과한다.
따라서 문자열 형태로 2번째 숫자를 입력받는다.
그 후, 문자열을 문자 배열로 변환하고,
문자 배열값을 각각 숫자형으로 변환하여 합을 구해야 한다.

예시로 입력값을 "1234"처럼 문자열로 입력받고,
이를 '1', '2', '3', '4'처럼 문자 배열로 변환 후,
1, 2, 3, 4로 변환한 다음 합을 구한다.

문자 값을 정수 형으로 변환하기

문자 값을 정수 형으로 변환하려면, 48 혹은 '0'을 빼주면 된다.

왜냐하면, 아스키 코드에서 '0'은 48, '1'은 49, '2'는 50, ... '9'는 57이다.
자바에서 char ch = '1'처럼 문자를 변수에 저장하면,
문자에 해당하는 코드 값(49)이 저장된다.

그 후 '1' - '0'의 경우,
문자 '1'의 코드값인 49에, 문자 '0'의 코드값인 48을 빼는 것과 같다.
따라서 연산 결과는 1이 나온다.

 

sc.next() 와 sc.nextLine()

문제 발생: nextInt()로 5를 읽은 후, nextLine으로 54321을 읽는 것을 의도했지만... 5를 읽고 난 후 엔터키를 누르지 않는가. 그 엔터키를 nextLine이 읽고 끝낸다. 그러니 next를 써야 한다.

  1. 입력 방식:
    • next(): 공백(스페이스, 탭 등)을 기준으로 단어를 읽습니다.
    • nextLine(): 개행 문자(엔터 키)를 기준으로 전체 라인을 읽습니다.
  2. 사용 상황:
    • next(): 단어 단위 입력이 필요한 경우 사용합니다. 예를 들어, 이름이나 명령어 입력 시 유용합니다.
    • nextLine(): 줄 단위 입력이 필요한 경우 사용합니다. 예를 들어, 한 문장이나 복수 단어로 이루어진 입력을 받을 때 유용합니다.
  3. 버퍼 처리:
    • next() 이후 nextLine()을 사용할 때는 next()가 읽고 남은 개행 문자를 처리하기 위해 nextLine()을 한번 더 호출하여 버퍼를 비워야 합니다.

String 클래스의 toCharArray()

이 문제를 풀기위해 알고 있어야 할 메소드.

코테에서 쓸 수도 있으니 눈에 익혀라.

 

ide에서 하면 큰 문제 안 되지만,

온라인에서 메모장같은 곳에서 하면 기억해야 하니까.

'CODING TEST > BOJ' 카테고리의 다른 글

[Java] 문제 006(백준 2018번)  (0) 2024.05.24
[Java] 문제 005(백준 10986번)  (0) 2024.02.14
[Java] 문제 004(백준 11660번)  (0) 2024.02.14
[Java] 문제 003(백준 11659번)  (0) 2024.02.14
[Java] 문제 002(백준 1546번)  (0) 2024.02.14