병훈's Blog

SWEA - 2058. 자릿수 더하기 (Python, Java, C++) 본문

Algorithm

SWEA - 2058. 자릿수 더하기 (Python, Java, C++)

thdqudgns 2022. 12. 30. 01:46

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

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

swexpertacademy.com

 

[제약 사항]

자연수 N은 1부터 9999까지의 자연수이다. (1 ≤ N ≤ 9999)


[입력]

입력으로 자연수 N이 주어진다.


[출력]

각 자릿수의 합을 출력한다.

 


역시 메모리와 실행시간은 C++이 압도적 1등이고

코드길이는 Python이 1등이다.

 


<Python>

a = input()
result = 0
for i in a:
    result += int(i)
print(result)

문자열에서 문자를 하나씩 읽어오면서 (for i in a:)

정수로 형변환하여 더해주는 방식을 사용했다.

 

이 방법이 가장 간단하다.

하지만 JAVA와 C++에서는 문자열을 정수로 변환하여 더하는 방법이 어려워,

이미 알고있는 방식 중 간단한 두번째 방식으로 풀이했다.

 

<JAVA>

import java.util.Scanner;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int result = 0;
         
        while (a != 0) {
            int tmp = a % 10;
            result += tmp;
             
            a /= 10;
        }
         
        System.out.println(result);
    }
}

정수를 10으로 나누면 나머지가 일의 자리수다. 그리고 몫을 새로 저장한다.

계속 10으로 나눈 나머지인 일의 자리수를 더하면 각 자리의 숫자의 합이 나온다.

while문을 사용하여 a가 다 나눠질 때까지 반복한다.

 

  • 일의 자리수를 구하기 위해 10으로 나눴다. 이때 나머지를 구하는 연산자가 %다.
  • 수를 더할 때 += 를 사용하면 좌항에 우항을 더한 것을 좌항에 새로 저장한다는 뜻이다.
  • 수를 나눌 때 /= 를 사용하면 좌항을 우항으로 나눈 것을 좌항에 새로 저장한다는 뜻이다.

 

<C++>

#include<iostream>
  
using namespace std;
  
int main(int argc, char** argv)
{
    int a;
    cin >> a;
    int result = 0;
      
    while (a!=0) {
        result += a%10;
        a /= 10;
    }
      
    cout << result;
      
    return 0;//정상종료시 반드시 0을 리턴해야합니다.
}

 

728x90
728x90