본문 바로가기

TIL/알고리즘

[TIL] 프로그래머스_자릿수 더하기

728x90

항해 9일차
오늘 하루도 알고리즘 문제를 계속 풀었고, 협력사 채용 세션이 있었다.
지금까진 IT회사에서 근무 경험이 없어 모든게 새로웠고 더 의지를 다질 수 있는 계기가 되었다.
채용 세션이 끝나고 자체 모의고사가 있었다. 총 2문제였고 나는 1번을 선택하여 문제를 풀고 나왔다. 나와보니 2번 문제에 대해 많은 토론이 있어 2번 문제도 함께 풀어보았다.

자릿수 더하기

문제

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는
solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항

  • N의 범위 : 100,000,000 이하의 자연수

입출력

N answer
123 6
987 24

입출력 예 설명

  • 입출력 예 #1
문제의 예시와 같습니다.
  • 입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

풀이 과정

  1. 반복문으로 %10 으로 자릿수를 구하여 더해주고 N을 10으로 나눠준다.

    1-1. N을 10으로 나눠주며 일의자리, 십의자리, 백의자리 순으로 구한다.

풀이 코드

import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;

        while(n != 0){
            answer += n % 10;
            n /=10;
        }
        return answer;
    }
}

모의고사 2번

문제

성륜이는 오늘 항해99를 시작했다. 성격이 급한 성륜이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다.
항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.

제한사항

  • 1 ≤ month ≤ 12
  • 1 ≤ day ≤ 31 (2월은 28일로 고정합니다, 즉 윤일은 고려하지 않습니다.)

입출력

month day result
11 27 :"3월 5일"
6 22 "9월 28일"

지정 입력값

month day result
1 18 :"4월 26일"

풀이 과정

  1. 98일에서 해당 월의 일자(1월은 31일, 2월은 28일...)를 빼줘서 구하는 방법을 선택했다.
  2. 지정 입력값으로 1월 18일이 입력되므로 당월은 입력 받는 18을 1월의 모든 일자(31일)에서 빼주고 allday변수에 누적 해서 뺴주었다.
  3. 2번 과정을 반목문으로 반복 하다보면 해당 월의 모든 일자보다 alldays가 작아지는 순간이 있다. 해당 부분에서 answer에 담아준다.

풀이 코드

public class Test {
    public String solution(int month, int day) {
        String answer = "";

        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int completion = 98;
        int alldays = completion - (days[month - 1] - day); //85
        int monthCnt = month + 1;

        for (int i = month; i <= days.length; i++) {
            if (alldays > days[i]) {
                alldays -= days[i];
                monthCnt++;
            } else {
                answer = monthCnt + "월 " + alldays + "일";
                break;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Test method = new Test();
        System.out.println(method.solution(1, 18));
    }
}