SHUSTORY

[ 백준 ] 11720번 : 숫자의 합 본문

코딩테스트/JAVA

[ 백준 ] 11720번 : 숫자의 합

어서오시우 2024. 1. 30. 21:31
728x90
문제

 

풀이 1
Character.getNumericValue( )
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String nums = br.readLine();
int sum = 0;
for (int i = 0; i < N; i++) {
sum += Character.getNumericValue(nums.charAt(i));
}
System.out.println(sum);
}
}
  • Character.getNumericValue( )
    • 0 - 9 사이의 숫자로 표현된 문자 값을 정수로 반환한다.
    • 만약 이외의 값일 경우는 음수 값을 반환한다.

 

풀이 2
charAt( )
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String str = sc.next();
int sum = 0;

for (int i = 0; i < N; i++) {
sum += str.charAt(i)-'0';
}
System.out.println(sum);
sc.close();
}
}
  • charAt( )
    • 해당 문자의 아스키 코드 값을 반환하므로 반드시 -48 또는 -'0'을 해주어야 입력받은 숫자 값 그대로를 사용할 수 있다.
      • 숫자 0의 아스키 코드 값은 48이다.

 

풀이 3
getBytes
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine();

int sum = 0;

for (byte value : br.readLine().getBytes()) {
sum += (value - 48);
}
System.out.println(sum);
}
}
  • getBytes( )
    • String 에 대하여 해당 문자열을 하나의 byte 배열 ( byte[ ] ) 로 변환해주는 메소드이다.
    • UTF-16(유니코드) 인코딩으로 변경되는 값을 따르기 때문에 -48 또는 -'0'을 해주어 원하는 값을 사용할 수 있다.
      • 유니코드 앞부분은 아스키코드와 호환되기 때문에 영어 문자, 숫자는 같다.
      • 인코딩은 정보를 특정 규칙에 따라 변환하는 것을 의미하며, 유니코드 인코딩은 문자를 숫자로 매핑하는 방식을 정의한다.
  • 참고로 위 코드에서는 처음 입력받은 값은 사용하지 않고 있다.