상세 컨텐츠

본문 제목

[TIL#18] Study] 코딩 테스트 7

개인 공부/코딩 테스트

by DK9 2023. 11. 10. 01:02

본문

1. 약수의 합

 

public static int solution(int n) {
    int answer = 0;
    for(int i = 1; i <= n; i++) {
        if (n%i == 0) {
            answer += i;
        }
    }
    return answer;
}

 

  • 약수들을 구해서 더하는 로직이다.
  • 평소 하던 것처럼 반복문을 작성하다가 에러를 맞이했다. 하찮지만 처음으로 로그를 보고 해결한 에러라서 기분이 좋았다.
    1. 출력된 로그는 이렇다. Exception in thread "main" java.lang.ArithmeticException: / by zero
    2. by zero 를 보면 알 수 있다시피 n%0 을 시도하는 반복문을 만들었었다. 습관적으로 반복문 조건식에 int i = 0 을 입력했기 때문이다.
  • 지난주에 이런 에러를 맞이하면 당황해서 해결하는데 최소 20분 정도는 소요됐겠지만, 오늘은 보자마자 알아챈 것을 보니 느리지만 꾸준히 나아가고 있는 것 같다.

 

2. 나머지가 1이 되는 수찾기

    public static int solution(int n) {

        for (int i = 1; i < n; i++) {
            if (n % i == 1) {
                return i;
            }
        }
        return 1;
    }

 

  • 나머지 1인 가장 작은 몫을 찾는 문제라서 나머지 1을 찾자마자 반복문을 종료하도록 했다.
    • 처음에 단순히 생각해서 끝에 남는 게 가장 작게 만들면 되겠구나 하고
      for (int i = n; i > 0; i--)를 했다. 왜 그랬을까?
  • 프로그래머스 lv은 큰 의미가 없는 것 같다.

 

3. 자연수 뒤집어 배열로 만들기

    public static int[] solution(long n) {

        String string_n = Long.toString(n);
        int[] answer = new int[string_n.length()];

        for (int i = 0; i < answer.length; i++) {
            answer[i] = (int) (n % 10);
            n /= 10;
        }
        return answer;

//        String string_n = Long.toString(n);           // 단순히 형변환으로만 푼 것
//        List<Character> char_n = new ArrayList<>();
//        int[] answer = new int[string_n.length()];
//
//        for (int i = string_n.length(); i > 0; i--) {
//            char_n.add(string_n.charAt(i-1));
//        }
//
//        for (int i = 0; i < char_n.size(); i++) {
//            answer[i] = Character.getNumericValue(char_n.get(i));
//        }
//
//        return answer;
    }

 

  • 오늘 푼 것 중 가장 의미 있던 문제다.
  • 문제를 푼 이후 단순히 형변환으로만 풀면 어떻게 될지 궁금해서 주석처리 된 로직으로도 풀었다. 짜임새 있는 로직의 영향력을 한눈에 볼 수 있었다.
  • 시작이 좀 늦어지더라도 문제의 요점을 찾고 이를 해결할 로직을 잘 짜는 것이 더 중요한 것 같다는 생각을 했다.

 

관련글 더보기