본문 바로가기

알고리즘/문제 풀이

2058 중간값 더하기

SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1. 내가 푼 방법

사용자의 입력 값이 한 자리 수에서 4자리 수로 다양할 수 있음으로, 각 상황에 맞는 if 분기를 만들어서, 하드코딩 했다. 

import java.util.Scanner;

public class Solution {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        System.out.println(Calc(N));

    }

    static int Calc(int N) {

        if(9999>=N && N>=1000){
            int A = N/1000;
            int B = (N%1000)/100;
            int C = ((N%1000)%100)/10;
            int D = (((N%1000)%100)%10)/1;

            return A+B+C+D;
        } else if (999>=N && N>=100) {
            int A = N/100;
            int B = (N%100)/10;
            int C = ((N%100)%10)/1;
            return A+ B+ C;
        } else if (99 >= N && N>=10) {
            int A = N/10;
            int B = (N%10)/1;
            return A + B;
        }else {
            return N;
        }
    }
}

 

다른 사람들의 답을 보니 이렇게 풀었더라 

import java.util.ArrayList;
import java.util.Scanner;

public class Solution {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String N = sc.next();

        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i < N.length(); i++) {
            list.add(N.charAt(i) - '0');
        }

        Integer a = 0;

        for (int i = 0; i < N.length(); i++) {

            a += list.get(i);


        }
        System.out.println(a);
    }
}

내가 배운 것

1. sc.next

sc는 Scanner 라이브러리를 이용하여 만든 객체로, 사용자의 입력이 들어가는 곳이다.

.next는 spacebar(공백)을 만나기 전까지 사용자가 입력한 값들을 문자열로 반환해주는 함수이다.

 

(번외 sc.nextLine)

.nextLine은 Enter를 만나기 전까지 사용자가 입력한 값들을 문자열로 반환해주는 함수이다.

2.String변수.length()

string 변수에 .length() 라는 내장함수를 쓰면 해당 문자열의 길이를 반환한다. 

3. String 변수.charAt(index)

charAt(index)는 문자열에서 하나의 문자를 추출할 수 있게 해주는 함수이다. 

index에 위치한 문자 하나를 추출하여 반환한다. 

문자열의 맨 첫 문자의 index를 0으로 두고 계산하면된다.

 

4. Integer Array List에 밑과 같이 값을 집어넣는 이유

list.add(N.charAt(i) - '0');

.charAt으로 String 형태의 입력 값을 char 형태의 숫자로 하나 하나씩 때온다. 

만약 입력이 "6789"이면 반복문이 진행됨에 따라 '6', '7', '8', '9'가 따로 따로 때어져서 반환될 것이다. 

 

여기서 문제는 char 값을 int 변수에 저장하면 해당 char 문자의 아스키 코드가 저장된다는 것이다.

아스키 코드는 이진수 밖에 이해하지 못하는 컴퓨터에게 문자를 기억시키기 위해 문자를 숫자로 표현한 하나의 약속이다. 

'0' ~ '9'까지의 char 값의 아스키 코드는 48 ~ 57이다.

따라서 '0' ~'9'는 원래 자신들이 의미하는 0~9보다 48씩 전부 큰 것이다. 

따라서 char 값을 받아서 48을 빼주면 int로 자동 변환 시킬 수 있다. 

여기서는 48을 '0'으로 대체 했다.

'알고리즘 > 문제 풀이' 카테고리의 다른 글

SW 2047 신문 헤드라인  (0) 2023.05.04
SW Academy D1 - 연월일 달력  (0) 2023.05.04
SW Expert Academy D1 - 2063 중간값 찾기  (0) 2023.05.02
예외 처리 _Quiz_11  (0) 2023.03.09
백준 10818번 최대 최소  (0) 2023.02.28