TIL

알고리즘 의문점

박민혁_kog 2023. 9. 1. 19:55

이 문제는 프로그래머스의 

3진법 뒤집기 라는 문제인데 

아래의 코드는 정답이긴하나 런타임 에러가 뜬다 

using System;
using System.Collections.Generic;
public class Solution {
    public int solution(int n) {
        int answer = 0;
        int number=n;
        List<int> a=new List<int>();
        while(number>=1)
        {
           a.Add(number%3);
           number=number/3;
        }
        a.Reverse();
        Console.WriteLine($"{a[0]}{a[1]}{a[2]}{a[3]}");
        
        Console.WriteLine($"{a.Count}");
        for(int i=0;i<a.Count;++i)
        {
           if(a[i]!=0)
           {

                   answer+=a[i]*(int)Math.Pow(3,i);
               
           }
            
           
        }
        Console.WriteLine($"{(int)Math.Pow(3,1)}");
        return answer;
    }
}

그러나 아래 코드는 뜨지 않는다!!!

using System;
using System.Collections.Generic;
public class Solution {
    public int solution(int n) {
        int answer = 0;
        int number=n;
        List<int> a=new List<int>();
        while(number>=1)
        {
           a.Add(number%3);
           number=number/3;
        }
        a.Reverse();
        for(int i=0;i<a.Count;++i)
        {
           if(a[i]!=0)
           {
                   answer+=a[i]*(int)Math.Pow(3,i);
           }            
        }
        return answer;
    }
}

차이가 있는건 내가 중간에 값 확인하기위해 console.WriteLine 3줄뿐인데 이 3줄로 런타임에러가 나는것일까? 

for문도 아니고 콘솔 단 3줄 때문에? 라는 의문이 생겼다

 

곱하기가 나누기 보다 빠르다

5 = 0.5 만들기 

1. 5*0.1= 0.5

2. 5/10=0.5

 

1이더 빠르다