프로그래머스 - 124 나라의 숫자

leehyunjon·2022년 8월 17일
0

Algorithm

목록 보기
102/162

124 나라의 숫자 : https://school.programmers.co.kr/learn/courses/30/lessons/12899


Problem


Solve

주어진 n을 1,2,4로만 표현해야한다.

1은 1, 2는 2, 3은 4로 표현가능하기 때문에 3진법과 비슷해보였다.

1%3 = 1, 2%3 = 2, 3%3 = 0이 되기 때문에 배열을 생성해서 {4, 1, 2}로 정의한다.

숫자를 3으로 나누었을 때의 나머지의 패턴이 있었다.

  • n%3 == 0일때
    • n에 대한 첫번째 값은 arr[0]으로 4가 나온다.
    • 그리고 n/3의 값에서 1을 감소시켜 n에 갱신해준다.
  • n%3 != 0일때
    • n에 대한 첫번째 값은 arr[n%3]이 되고
    • n/3의 값을 n에 갱신해준다.

위 조건을 n==0이 될때까지 반복해준다.

예를 들어 27은 124나라의 수로 변경하면 224이다.

  1. n = 27일때

    • 몫은 9, 나머지는 0이다. 124나라 수에 4를 추가해주고 몫에서 1을 감소시켜 n을 갱신한다.
  2. n = 8

    • 몫은 2, 나머지는 2이다. 124나라 수에 2를 추가해주고 n을 2로 갱신한다.
  3. n = 2

    • 몫은 0, 나머지는 2이다. 124나라 수에 2를 추가하고 n을 0으로 갱신한다.
  4. n = 0

    • n에 0이기 때문에 반복 중지.

결과는 넣은 순서를 reverse하여 224가 나오게된다.


Code

public class 나라의숫자124 {
	public static void main(String[] args) {
		int n = 27;
		System.out.println(solution(n));
	}

	static String solution(int n){
		int[] arr = {4,1,2};

		StringBuilder sb = new StringBuilder();
		//몫이 0이게 되면 중지
		while(n!=0){
			//몫의 몫 (처음에는 n의 몫)
			int value = n/3;
			//몫의 나머지 (처음에는 n의 나머지)
			int rest = n%3;

			//만약 나머지가 0이게 되면 몫에서 1를 감소시킨다.
			if(rest == 0) value--;

			//나머지 값을 124진법으로 바꾸어 저장.
			sb.append(arr[rest]);

			//몫을 갱신한다.
			n = value;
		}

		return sb.reverse().toString();
	}
}

Result

접근방법과 풀이방법을 잘 기억해두었다가 잘 응용해보자.


Reference

https://velog.io/@hyeon930/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-124-%EB%82%98%EB%9D%BC%EC%9D%98-%EC%88%AB%EC%9E%90-Java

profile
내 꿈은 좋은 개발자

0개의 댓글