풀이 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 |