[프로그래머스] 3: 하샤드 수, 두 정수 사이의 합, 콜라츠 추측

서예진·2024년 1월 11일
0

💡하샤드 수 : Lv.1

출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 하샤드 수

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int number = 0;
        
        String s = String.valueOf(x);
        char[] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i++){
            number += Character.getNumericValue(arr[i]);
        }
        if (x%number == 0){
            answer = true;
        } else {
            answer = false;
        }
        return answer;
    }
}
  • 정수를 입력받고 자릿수를 이용한 연산 문제가 많음
  • 입력받은 정수 -> 문자열로 변환 -> charArray로 변환 -> charArray 돌면서 다시 정수로 변환 -> 연산
  • 정수를 문자열로 변환한뒤에 char타입의 배열로 만들면 자릿수대로 접근이 가능하기 때문에 이렇게 풀이함

💡두 정수 사이의 합 : Lv.1

출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 두 정수 사이의 합

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        int min = 0;
        int max = 0;
        if (a < b){
            min = a;
            max = b;
        } else {
            min = b;
            max = a;
        } 
        for(int i = min; i <= max; i++){
            answer += (long)i;
        }
        
        return answer;
    }
}
  • for문을 통해 더하기 연산을 수행
  • 대소관계를 먼저 정의한 후 반복문을 진행
  • a == b 인 경우는 min, max 정의가 영향을 미치지 않으므로 else로 묶음

💡콜라츠 추측 : Lv.1

출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 콜라츠 추측

class Solution {
    public int solution(int num) {
        int answer = 0;
        int count = 0;
        int evenOrodd = 0;
        
        while(num!=1){
            count += 1;
            evenOrodd = num%2;
            if (count == 500){
                break;
            }
            switch(evenOrodd){
                case 0: num /= 2;
                    break;
                case 1: num = (num*3) + 1;
                    break;
            }
        }
        if(count == 500){
            answer = -1;
        } else {
            answer = count;
        }
        return answer;
    }
}
  • 주어진 절차대로 if문을 사용하여 구현
  • answer이 1이 될 때 까지 반복되어야 하므로 while문 사용
  • 작업의 수가 제한되므로 while 돌 때마다 count+=1할 필요가 있음
  • 들어온 숫자마다 한번씩만 연산되어야 하므로 if문 보다는 switch문을 통해 만들어야함
  • while문에서 count가 500이 되는 순간 while문이 종료되어야 함
    그러기 위해서는 switch문을 돌기 전에 count가 500인지 확인하는 if문이 있어야함
profile
안녕하세요

0개의 댓글