본문 바로가기

Coding Test

do it 코딩 테스트: 숫자의 합 구하기

Q. N개의 숫자가 공백 없이 써 있다. 이 숫자를 모두 합해 출력하는 프로그램을 작성하시오.

(난이도: 브론즈 II)

    (1) 입력: 1번째 줄에 숫자의 개수 N(1 <= N <= 100), 2번째 줄에 숫자 N개가 공백 없이 주어진다.

    (2) 출력: 입력으로 주어진 숫자 N개의 합을 출력한다

 

 

 

입출력 예시

 

 

 

- 문제 분석

그렇다면 이 문제에서 해결해야 할 task 3가지는 무엇일까요? 바로

1. 문자열 길이를 입력받고 문자열을 입력 받는 것

2. 입력받은 문자열을 한 글자씩 볼 수 있도록 하는 작업

3. 누적합을 구하는 작업 총 3가지 작업으로 나뉠 것 입니다.

 

 

 

해결해야 할 3가지 task

 

 

 

-  코드구현

코드 구현 같은 경우 1. 배열을 이용해서 하는 방법과 2. 배열을 이용하지 않은 방법 두 가지 방법이 있는데요. 

 

1. 배열을 이용한 방법

   s1.toCharArray() 함수를 이용해 String형 문자열 변수인 s1을 char형 배열로 변환을 시켜준 후

  입력받은 문자열의 길이 수만큼 for문을 회전하면서 각 배열 요소(char 형)를 int로 변환해 누적합을 구하는 방식을 이용 할 수 있습니다. 여기서 참고로 Character.getNumericValue()는 숫자형태의 char 자료형을 int로 바꿔는 함수입니다. 정리 하자면

 

▶ Character.getNumericValue( 매개변수 )

매개변수 : char형 숫자 여기는 arr[i]

 

반환값: char형에서 int형으로 변환된 숫자

 

Character.getNumericValue(arr[i])는 배열 arr에 담긴 숫자 문자를 하나씩 int형으로 변환시켜주는 역할을 하는 셈 입니다.

이후 total변수에 누적 합을 구해주면 원하는 결과 값을 얻을 수 있습니다.

 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        // 입력을 받기 위한 scanner 객체 생성
        Scanner sc = new Scanner(System.in);

        // 입력 받을 숫자의 개수를 받음
        System.out.print("입력할 수의 개수를 입력하세요: ");
        int num  = sc.nextInt();
        // num만큼의 숫자 문자열을 입력 받음
        System.out.print("숫자 문자열을 입력하세요: ");
        String s1 = sc.next();

        //String을 한 글자씩 나눠 char타입의 배열로 변환
        char arr[] = s1.toCharArray();
        int total = 0;
        for(int i = 0; i < num; i++)
            total += Character.getNumericValue(arr[i]);

        System.out.println("결과값은: "+total);


    }
}

 

출력 화면은 다음과 같습니다.

 

배열을 이용한 방법의 출력 결과

 

 

 

2. 배열을 이용하지 않은 방법

 

1번 외에도 배열을 이용하지 않고 문자열만을 이용해서 처리 하는 방법도 있습니다. 이 코드에서 핵심은 charAt() 와 1번에도 사용된 Character.getNumericValue()인데요.  1번에서 getNumericValue 함수에 대해서 이미 설명 했으니 charAt()만 살펴보도록 하겠습니다.

 

▶ CharAt(매개변수)

매개변수: 인덱스   ex) 0,1,2......

 

반환값: 인덱스에 해당하는 char형 문자

 

예를 들어 입력이 10498라고 가정 했을 때, 만약 현재 for문의 i가 0이라면 charAt(i)는 charAt(0)형태가 될 것이고 반환 값은 문자열의 0번째 인덱스에 대응되는 요소인 1이 되는 것이죠!

 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        // 입력을 받기 위한 scanner 객체 생성
        Scanner sc = new Scanner(System.in);

        // num만큼의 숫자 문자열을 입력 받음
        System.out.print("숫자 문자열을 입력하세요: ");
        String s1 = sc.next();

        int total = 0;
        //문자열의 길이만큼 for문을 순회하며 즉 0부터 (배열길이-1)만큼의 인덱스를 돌며, 각 인덱스에 있는 문자를 가지고 와 누적합을 구함
        for(int i = 0; i < s1.length(); i++)
            total += Character.getNumericValue(s1.charAt(i)); //s1.charAt(i): i번째 인덱스에 있는 요소를 반환해주는 함수

        System.out.println("결과값은: "+total);
    }
}

 

 

2번 방법 또한 결과가 동일하게 나오는 것을 보실 수 있습니다.

 

배열을 이용하지 않은 방법 출력

'Coding Test' 카테고리의 다른 글

Do it 코딩 테스트: 구간 합 구하기  (0) 2023.09.14
do it 코딩 테스트: 평균 구하기  (0) 2023.09.11