숫자의 합 (11720) 풀이

2023. 6. 16. 11:45BaekJoon/문자열

문제내용

사용자에게 정수 N을, N자리의 정수를  입력받아 N자리 정수의 각 자리의 합을 구해 출력하는 문제이다.


풀이

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

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		String s = br.readLine();
		int result = 0;
		for(int i = 0 ; i < n; i++){
			char c = s.charAt(i);
			result += Character.getNumericValue(c);
		}
		bw.write(result+"");
		bw.flush();
		bw.close();
	}

}

사용자에게 자리수 n과 n개의 정수를 입력받기 위해 BufferedReader를 사용해 n과 s에 입력받았다.

자리수 만큼 반복하기 때문에 for문을 사용해 문자열의 각 인덱스 값을 char 자료형 c에 담고 Character에서 제공하는 메소드 getNumericValue를 사용해 정수로 변환했다.

변환한 정수를 result에 더해 저장하고 마지막 출력을 위해 BufferedWriter를 사용해 출력했다.


겪었던 문제

문자열에서 각 인덱스의 문자를 char 자료형으로 변환하는 것까지 완료했지만 이것을 int 자료형으로 바꾸는 방법에서 처음에 생각한건 int 자료형으로 형변환을 시키려고 했지만 아스키코드값으로 변환이 됐다. 혹시 몰라 char 자료형 자체에서 합을 구하려고 해봤지만 동일하게 아스키 코드로 변환해 합을 구하고 있었다.

그럼 아스키 코드로 변환될 때 각 숫자에서 48을 빼면 어떨까? 라고 생각했었다. 이유는 각 숫자에서 48을 더한값이 아스키 코드이기 때문이다. 하지만 이렇게 하면 비효율적일 것 같아 쓰지 않기로 했다.

도저히 방법이 생각나지 않아 구선생님께 여쭤보니 위에서 생각한 48을 빼는 방법과 풀이에서 사용한 Character.getNumericValue()를 사용하는 것이다.char 자료형에서 정수로 변환을 해주는 메소드인데 이 방법이 성능적으로 더 좋을 것 같아 풀이에서 사용했다.

백준을 풀면서 겪었던 문제를 지금까지 중 가장 길게 서술한 것 같다.. 모르는게 많으니 당연하게도 겪는 문제는 앞으로도 더 많을 것 같다... 그래도 해결해보면서 독자들에게 공유해보겠다..😂

'BaekJoon > 문자열' 카테고리의 다른 글

문자열 반복 (2675) 풀이  (0) 2023.06.16
알파벳 찾기 (10809) 풀이  (0) 2023.06.16
아스키 코드 (11654) 풀이  (0) 2023.06.16
문자열 (9086) 풀이  (0) 2023.06.16
단어 길이 재기 (2743) 풀이  (2) 2023.06.15