백준 너의 이름은 몇 점이니?

KIMYEONGJUN·2025년 9월 24일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에 이름의 길이가 주어진다.
길이는 100자 이하이다.
두 번째 줄에 이름이 띄어쓰기 없이 대문자로 주어진다.

주어진 이름에 대한 "이름점수"를 출력해주자.

내가 이 문제를 보고 생각해본 부분

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.in은 표준 입력 스트림(일반적으로 키보드)을 나타낸다.
InputStreamReader는 바이트 단위의 System.in을 문자 단위로 읽을 수 있도록 변환해준다.
BufferedReader는 InputStreamReader를 감싸서 문자를 버퍼링하여 한 번에 여러 문자를 읽을 수 있도록 성능을 향상시킨다. 
이 설정을 통해 사용자로부터 입력값을 효율적으로 받을 준비를 마친다.
이름 길이 읽기 (int N = Integer.parseInt(br.readLine());):
int N = Integer.parseInt(br.readLine());
br.readLine() 메서드를 호출하여 첫 번째 줄(이름의 길이)을 String 형태로 읽어온다.
Integer.parseInt() 메서드를 사용하여 읽어온 String을 int 타입으로 변환하여 변수 N에 저장한다. 
이 N은 for 루프의 반복 횟수를 지정하는 데 사용된다.
이름 문자열 읽기 (String name = br.readLine();):
String name = br.readLine();
다시 br.readLine()을 호출하여 두 번째 줄(이름)을 String 형태로 읽어와 name 변수에 저장한다.
총 점수 계산 변수 초기화 (int totalScore = 0;):
int totalScore = 0;
계산된 모든 알파벳 점수를 합산할 totalScore 변수를 0으로 초기화한다. 
점수를 누적하기 위한 시작점이다.
반복문을 통한 점수 계산 로직 (for 루프):
for(int i = 0; i < N; i++): 이름의 길이(N)만큼 반복하는 루프이다. 
i는 현재 처리 중인 문자의 인덱스를 나타낸다.
char ch = name.charAt(i);: name 문자열에서 i번째 위치에 있는 문자를 가져와 ch 변수에 저장한다. 
charAt() 메서드는 문자열에서 특정 인덱스의 문자를 반환한다.
int score = ch - 'A' + 1;: 이 부분이 핵심적인 점수 계산 로직이다.
자바에서 문자는 내부적으로 아스키(ASCII) 코드 값으로 저장된다. 
대문자 'A'의 아스키 값은 65, 'B'는 66, ..., 'Z'는 90이다.
ch - 'A' 연산은 현재 문자(ch)의 아스키 값에서 'A'의 아스키 값을 빼는 것이다. 
예를 들어 'S'(아스키 83)라면 83 - 65 = 18이 된다.
여기에 + 1을 더해주면, 'A'는 1점, 'B'는 2점...과 같이 문제에서 요구하는 1부터 시작하는 점수를 얻게 된다. ('S'의 경우 18 + 1 = 19점이 된다.)
totalScore += score;: 계산된 score를 totalScore에 누적하여 더한다.
결과 출력 (System.out.println(totalScore);):
System.out.println(totalScore);
모든 문자에 대한 점수 계산이 끝난 후, 최종적으로 totalScore에 저장된 값을 표준 출력(콘솔)으로 출력한다.
br.close();: BufferedReader 사용이 끝났으므로, 열린 자원을 닫아준다.

코드로 구현

package baekjoon.baekjoon_30;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 15813번 문제
public class Main1156 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 첫 번째 줄에서 이름의 길이를 읽지만, 실제 이름 문자열 처리에는 직접 사용되지 않습니다.
        int N = Integer.parseInt(br.readLine());

        // 두 번째 줄에서 이름을 읽습니다.
        String name = br.readLine();

        int totalScore = 0; // 총 점수를 저장할 변수를 초기화합니다.

        // 이름의 각 문자를 순회하면서 점수를 계산하고 더합니다.
        for(int i = 0; i < N; i++) {
            char ch = name.charAt(i); // 현재 위치의 문자를 가져옵니다.

            // 'A'의 아스키 코드를 뺀 후 1을 더하면, A=1, B=2 ... Z=26 점수를 얻을 수 있습니다.
            // 예를 들어, 'A' - 'A' + 1 = 0 + 1 = 1
            // 'B' - 'A' + 1 = 1 + 1 = 2
            int score = ch - 'A' + 1;
            totalScore += score; // 계산된 점수를 총점에 더합니다.
        }

        // 최종 점수를 출력합니다.
        System.out.println(totalScore);
        br.close(); // BufferedReader를 닫습니다.
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글