솔솔
[알고리즘] 숫자의 합 (백준 11720번) 본문
반응형
🌵 문제 풀이
1. N의 범위가 1부터 100까지
- int형(-2,147,483,648 ~ 2,147,483,647), long형(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)과 같은 수 자로 담을 수 없음
- String형으로 입력값을 받은 후 문자 배열로 반환해서 문자 배열값을 순서대로 읽으면서 숫자형으로 더하는 방법 선택 (toCharArray() 함수 활용)
2. 문자열 → 숫자형으로 변형
- 아스키코드 이용
- '1'은 아스키코드 값이 49이므로 '1'을 숫자로 변환하려면 '1' - 48 = 1
- 또는 '1' - '0'으로 변형해서 계산
🌵 제출 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String sNum = sc.next();
int sum = 0;
for(char cNum : sNum.toCharArray()) {
sum += (cNum - '0');
}
System.out.println(sum);
}
}
🌵 다양한 접근 방식
다른 사람의 문제 체출 코드를 보니
나는 아스키코드를 활용해서 문자열을 숫자형으로 변형해서 계산을 했는데
Character.getNumericValue(char형) 함수를 활용해서 계산한 사람도 있었다.
그래서 내가 사용한 방법과 비교해봤다
방법 | 속도 | 가독성 | 설멍 |
cNum - '0' | 빠름 | 좋음 | 문자 '0'의 ASCII(=48)을 빼서 정수 변환 |
cNum - 48 | 빠름 | 나쁘지 않음 | '0' 대신 숫자 48을 직접 사용 (가독성↓) |
Character.getNumericValue(cNum) | 느림 | 좋음 | 문자 범위(숫자, 알파벳, 유니코드 등)까지 변환 지원 |
✅ 결론은 숫자 문자 변환 시 → cNum - '0'이 가장 빠르고 가독성도 좋은 듯!!
'나의보물들 > 알고리즘' 카테고리의 다른 글
[알고리즘-프로그래머스] 소인수분해 (0) | 2024.01.18 |
---|---|
[알고리즘-프로그래머스] 삼각형의 완성조건(2) (0) | 2024.01.18 |
[알고리즘-프로그래머스] 합성수 찾기 (0) | 2024.01.17 |