백준 SMUPC의 등장

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

문제

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

첫 줄에 알파벳 소문자로만 이루어진 단어 S가 주어진다.
이때, 입력되는 S의 길이는 10을 넘지 않는다.

단어 S의 각 문자에 대한 프로그램의 출력값을 각 줄별로 출력한다.

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

초기 설정 및 입력 받기:
BufferedReader를 사용하여 표준 입력으로부터 데이터를 효율적으로 읽어온다.
br.readLine()을 통해 첫 번째 줄에 입력된 소문자 알파벳으로 이루어진 단어 S를 읽어온다.
문자열 순회:
for(char c : S.toCharArray()) 구문은 입력받은 문자열 S를 문자(char) 배열로 변환한 후, 각 문자를 하나씩 c 변수에 할당하여 반복 작업을 수행한다.
아스키코드 값 및 자릿수 합 계산:
아스키코드 값 얻기: Java에서 char 타입 변수를 int 타입 변수에 바로 할당하면 해당 문자의 아스키코드(ASCII) 값을 얻을 수 있다. 
예를 들어, 's'는 int 타입으로 변환될 때 115가 된다. 
int asciiValue = c; 이 부분이 그 역할을 한다.
자릿수 합 계산(while 루프):
digitSum 변수는 아스키코드 값의 각 자릿수를 더한 결과를 저장할 변수이며, 0으로 초기화된다.
tempAscii 변수는 asciiValue를 복사한 것으로, 이 값을 사용하여 자릿수 합을 계산하면서 원래 아스키코드 값은 유지한다.
while(tempAscii > 0) 루프는 tempAscii가 0보다 큰 동안 계속 실행된다.
digitSum += tempAscii % 10; : tempAscii를 10으로 나눈 나머지(% 10)는 해당 숫자의 가장 오른쪽 자릿수(일의 자리)를 의미한다. 
이 값을 digitSum에 더한다.
tempAscii /= 10; : tempAscii를 10으로 나누면 가장 오른쪽 자릿수가 제거된다. 
예를 들어, 115는 11이 되고, 11은 1이 되는 식이다.
이 과정을 통해 tempAscii가 0이 될 때까지 모든 자릿수를 digitSum에 누적한다.
결과 출력:
for(int i = 0; i < digitSum; i++) { System.out.print(c); } : 앞에서 계산한 digitSum 값만큼 현재 문자 c를 반복하여 출력한다. 
System.out.print()는 줄바꿈 없이 해당 내용을 출력한다.
System.out.println(); : 한 문자에 대한 출력이 끝난 후, 다음 문자의 결과는 새 줄에 출력되어야 하므로 줄바꿈을 해준다.
마지막으로 br.close()를 호출하여 BufferedReader가 사용하던 시스템 자원을 반환한다.

코드로 구현

package baekjoon.baekjoon_30;

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

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

        // 첫 줄에 알파벳 소문자로만 이루어진 단어 S를 입력받습니다.
        String S = br.readLine();

        // 입력받은 단어 S의 각 문자를 순회합니다.
        for(char c : S.toCharArray()) {
            // 문자의 아스키코드 값을 구합니다.
            int asciiValue = c;

            // 아스키코드 값의 각 자릿수의 합을 계산합니다.
            int digitSum = 0;
            int tempAscii = asciiValue; // 자릿수 합을 계산하기 위해 임시 변수에 아스키 값 저장

            while(tempAscii > 0) {
                digitSum += tempAscii % 10; // 마지막 자릿수를 더합니다.
                tempAscii /= 10;           // 마지막 자릿수를 제거합니다.
            }

            // 계산된 자릿수의 합만큼 해당 문자를 반복하여 출력합니다.
            for(int i = 0; i < digitSum; i++) {
                System.out.print(c);
            }
            // 각 문자의 결과는 다음 줄에 출력되도록 줄바꿈합니다.
            System.out.println();
        }

        br.close(); // BufferedReader를 닫아 자원을 해제합니다.
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글