문제 풀기/C#

40. 3진법 뒤집기

kagan-draca 2025. 1. 22. 15:43

 

풀이 1) int 형 매개변수 n을 %(나머지)을 수행한 결과를 string temp 변수에 저장 후 문자열 temp를 뒤집고

            각각의 element와 index를 비교해서 element * 3^index를 한 결과를 모두 더한다.

using System;
using System.Linq;

public class Solution {
    public int solution(int n) {
        string temp = "";
        while(n != 0)
        { 
            temp += n % 3;
            n /= 3;
        }

        temp = new string(temp.Reverse().ToArray());
        
        return (int)temp.Select((element, index)=> int.Parse(element.ToString()) * Math.Pow(3, index)).Sum();
    }
}

 

처음에는 위와 같은 방식으로 풀었지만, 다른 사람들이 푼 방식이 궁금해서 조금 찾아 봤다.

 

풀이 2) 먼저, int 형 변수 1개(answer)를 선언하고 매개변수 n을 /(나누기) 3을 진행하면서 answer에 n % 3을 저장한다.

            이때, 핵심은 각 진행마다 answer *= 3을 해서 이전 answer = n % 3의 결과가 * 3배 될 수 있도록 해준다.

 

using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        
        while(n > 0)
        {
            answer *= 3;
            answer += n % 3;
            n /= 3;
        }
        
        return answer;
    }
}

 

위와 같이 형변환을 많이 사용하지 않고 수행 시간이 짧은 방식으로 

 

반전된 3진법 -> 10진법으로 표현할 수 있다는 사실이 놀랍다...

(아직 갈 길이 멀다...)

 

 

'문제 풀기 > C#' 카테고리의 다른 글

42. 삼총사  (0) 2025.01.23
41. 이상한 문자 만들  (0) 2025.01.23
39. 최대공약수와 최소공배수  (0) 2025.01.22
38. 직사각형 별찍기  (0) 2025.01.22
37. 행렬의 덧셈(고정 다차원 배열, 가변 다차원 배열)  (0) 2025.01.21