1-2 [배열과 리스트 실전 문제] 숫자의 합 구하기 (백준 11720)

그린·2023년 3월 2일
0
post-custom-banner

https://www.acmicpc.net/problem/11720

54321

5+4+3+2+1

수학적으로 생각해보면

54321 / 10000 = 5 추출

54321 % 10000 = 4321

4321 / 1000 = 4

4321 % 1000 = 321….

이렇게 하는 것이 간단하지는 않음.

이렇게 하면 100자리수가 들어온 경우에 대해서는 int, long형으로 받을 수 없음.

꼼꼼하게 먼저 파악한 후 분석하고 나서 구현에 들어가야 함.

여기서 제일 핵심 : 손으로 해보다가 안 된다는 것을 깨달아야 함. int, long형으로 받을 수 없다는 것을 깨닫게 됨.

1단계 문제 분석하기

1 ≤ N≤ 100 이므로 int, long형과 같은 숫자형으로 담을 수 없음.

String 형태로 받게 되면 “54321” → 이를 배열로 {5,4,3,2,1}로 만들고 싶음.

toCharArray함수를 쓰면 char[] 배열로 만들 수 있음

char → int는 아스키코드 원리로 연산 가능.

‘1’ - 1 의 아스키코드 차이는 48 차이!

‘1’ - 48 = 1로 떨어짐.

이렇게 진행하면 문제가 쉽게 풀릴 것임.

2단계 손으로 풀어보기

  1. 숫자의 개수만큼 입력받은 값을 String형으로 저장합니다.
    1. String sNum = 10987654321
  2. String형으로 입력받은 값을 char[] 형으로 변환합니다.
    1. char {1,0,9,8,7,6,5,4,3,2,1}
  3. 인덱스가 0 ~ 끝까지 배열을 탐색하며 각 값을 정수형으로 변환하고(아스키코드 적용) 결괏값에 더하여 누적합니다.

3단계 슈도코드 작성하기

N값 입력받기
길이 N의 숫자를 입력받아 String형 변수 sNum에 저장하기
sNum을 다시 char[]형 변수 cNum에 변환하여 저장하기
int형 변수 **sum** 선언하기
for (cNum 길이만큼 반복하기)
{
	배열의 각 자릿값을 **정수형**으로 변환하며(아스키코드) **sum에 더하여 누적하기**
}
sum 출력하기

4단계 실제 코드 작성하기

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

public class Main2 {
    public static void main(String[] args) throws IOException {
        // 내가 푼 것
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        int n = Integer.parseInt(br.readLine());
//        String line = br.readLine();
//
//        int sum = 0;
//        for (int i = 0; i < n; i++) {
//            sum += line.charAt(i) - '0';
//        }
//        System.out.println(sum);

        // 강의에서 푸신 코드
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        String sNum = sc.next();
        char[] cNum = sNum.toCharArray();
        int sum  = 0;
        for (int i = 0; i < cNum.length; i++) {
            sum += cNum[i] - '0';
        }
        System.out.println(sum);
    }
}
profile
기록하자
post-custom-banner

0개의 댓글