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

woonie·2022년 1월 19일
0

TIL

목록 보기
8/64
post-custom-banner

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

자릿수 더하기

문제

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

제한사항

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

입출력

Nanswer
1236
98724

입출력 예 설명

  • 입출력 예 #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일로 고정합니다, 즉 윤일은 고려하지 않습니다.)

입출력

monthdayresult
1127:"3월 5일"
622"9월 28일"

지정 입력값

monthdayresult
118:"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));
    }
}
profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.
post-custom-banner

0개의 댓글