Coding Test/Java Coding Test

[프로그래머스 / 자바] - 저주의 숫자 3

nam_ji 2024. 9. 13. 19:10

저주의 숫자 3 - LV.0

문제

  • 3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에
  • 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
    • 10진법 3x 마을에서 쓰는 숫자 10진법 3x 마을에서 쓰는 숫자
      1 1 6 8
      2 2 7 10
      3 4 8 11
      4 5 9 14
      5 7 10 16
  • 정수 n이 매개변수로 주어질 때, 
  • n을 3x 마을에서 사용하는 숫자로 바꿔 출력하는 문제입니다.


테스트 (인텔리제이)

  • 제 풀이와 다른 사람 풀이 중에서 더 좋은 코드가 있어 가져와 봤습니다.

1번 풀이

  • n 번째 나올 수가 궁금하기 때문에 for문을 이용했습니다.
  • n번쨰가 될 때까지 수는 무조건 1씩 증가하기 때문에 for문이 시작하면 answer는 1씩 증가합니다.
  • 하지만 3의 배수 또는 3이 포함된 숫자는 뺴고 진행되어야 하기 때문에 while문을 이용하여 answer가 3의 배수이거나 3을 포함하고 있다면 해당되지 않을 때까지 1씩 증가할 수 있게 while문을 사용하여 해결했습니다.

2번 풀이

  • 두 번째 풀이도 첫 번째와 비슷하지만 다른 점은 while문을 사용하지 않고 if문을 사용하여 if문에 해당하게 되면 for문의 순번을 가리키는 i의 값을 1 감소하게 하여 푼 풀이입니다.

3번 풀이

  • 세 번쨰 풀이는 두 번쨰와 다 똑같지만 한가지 다른 점은 if문에 해당하면 n을 1 증가하는 풀이입니다.

4번 풀이

  • 네 번째 풀이는 n의 제한 조건이 100이기 때문에 1부터 100까지 나올 수 있는 값을 배열로 정리하여 n - 1에 해당하는 원소 값을 반환하는 풀이입니다.
package com.namji.codingtest;

public class 저주의_숫자_3 {
  public static void main(String[] args) {
    /*
    3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에
    3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
    10진법	  3x 마을에서 쓰는 숫자	10진법	  3x 마을에서 쓰는 숫자
    1	      1	                  6	      8
    2	      2	                  7	      10
    3	      4	                  8	      11
    4	      5	                  9	      14
    5	      7	                  10	    16
    정수 n이 매개변수로 주어질 때,
    n을 3x 마을에서 사용하는 숫자로 바꿔 출력하는 문제입니다.

    제한사항
    1 ≤ n ≤ 100

    입출력 예
    n	  result
    15	25
    40	76

    입출력 설명
    #1
    15를 3x 마을의 숫자로 변환하면 25입니다.
    #2
    40을 3x 마을의 숫자로 변환하면 76입니다.
     */
    /*
    n	  result
    15	25
    40	76
     */
    int n = 40;
    int answer = 0;

    for (int i = 1; i <= n; i++) {
      answer++;
      while (answer % 3 == 0 || (answer + "").contains("3")) {
        answer++;
      }
    }
    System.out.println(answer);
    
//    int n = 40;
//    int answer = 0;
//
//    for (int i = 1; i <= n; i++) {
//      answer++;
//      if (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
//        i--;
//      }
//    }
//    System.out.println(answer);

//    int n = 40;
//    int answer = 0;
//
//    for (int i = 1; i <= n; i++) {
//      answer++;
//      if (answer % 3 == 0 || (answer + "").contains(3 + "")) {
//        n++;
//      }
//    }
//    System.out.println(answer);

//    int n = 40;
//    int[] answer = { 1, 2, 4, 5, 7, 8, 10, 11, 14, 16, 17, 19, 20, 22, 25, 26, 28, 29, 40, 41, 44, 46, 47, 49, 50, 52,
//        55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 74, 76, 77, 79, 80, 82, 85, 86, 88, 89, 91, 92, 94, 95,
//        97, 98, 100, 101, 104, 106, 107, 109, 110, 112, 115, 116, 118, 119, 121, 122, 124, 125, 127, 128, 140,
//        142, 145, 146, 148, 149, 151, 152, 154, 155, 157, 158, 160, 161, 164, 166, 167, 169, 170, 172, 175, 176,
//        178, 179, 181, 182, 184, 185 };
//
//
//    System.out.println(answer[n - 1]);
  }
}

프로그래머스 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for (int i = 1; i <= n; i++) {
            answer++;   
            while (answer % 3 == 0 || (answer + "").contains("3")) {
                answer++;
            }
        }
        
        return answer;
    }
}

// class Solution {
//     public int solution(int n) {
//         int answer = 0;
        
//         for (int i = 1; i <= n; i++) {
//             answer++;
//             if (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
//                 i--;
//             }
//         }
        
//         return answer;
//     }
// }

// class Solution {
//     public int solution(int n) {
//         int answer = 0;
        
//         for (int i = 1; i <= n; i++) {
//             answer++;
//             if (answer % 3 == 0 || (answer + "").contains(3 + "")) {
//                 n++;
//             }
//         }
        
//         return answer;
//     }
// }

// class Solution {
//     public int solution(int n) {
//            int[] answer = { 1, 2, 4, 5, 7, 8, 10, 11, 14, 16, 17, 19, 20, 22, 25, 26, 28, 29, 40, 41, 44, 46, 47, 49, 50, 52, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 74, 76, 77, 79, 80, 82, 85, 86, 88, 89, 91, 92, 94, 95, 97, 98, 100, 101, 104, 106, 107, 109, 110, 112, 115, 116, 118, 119, 121, 122, 124, 125, 127, 128, 140, 142, 145, 146, 148, 149, 151, 152, 154, 155, 157, 158, 160, 161, 164, 166, 167, 169, 170, 172, 175, 176, 178, 179, 181, 182, 184, 185 };
        
//         return answer[n - 1];
//     }
// }