[프로그래머스 / C#] x만큼 간격이 있는 n개의 숫자

2025. 2. 6. 21:01프로그래머스 코딩테스트 연습

 

☆기본 제공 코드

public class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[] {};
        return answer;
    }
}

 

 

C# 배열 이해하기

JavaScript로 문제를 풀던 것이 익숙해서, answer.push() 같은 걸로 배열에 하나씩 밀어넣으면 되는 간단한 문제라고 생각했다. 유니티 스크립트를 잠시 건드렸을 때, List에 Add 메서드를 사용했던 기억에 배열도 된다고 잠시 착각한 것이다.

 

길이가 n개로 정해진 문제이므로, answer의 길이를 정해두고 n번째 항목의 값을 밀어넣기로 했다.

public class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n] {};
        for(int i = 0; i < n; i++)
        {
            answer[i] = x*(i+1);
        }
        return answer;
    }
}

 

그리고 컴파일러 오류가 났다.

 

n개의 항목이 들어간 배열로 선언함과 동시에 { }로 초기화해서 발생한 오류같았다. 해당 부분을 지우고, 코드를 실행하니 테스트를 통과할 수 있었다.

public class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for(int i = 0; i < n; i++)
        {
            answer[i] = x*(i+1);
        }
        return answer;
    }
}

 

그러나 13, 14번째 케이스에서 실패 처리가 되었다.

 

x의 범위가 -10000000 이상, 10000000 이하인 정수이고 n이 1000 이하인 자연수이기 때문에, 두 값이 최대치에 근접할 경우 int값으로 담아낼 수 없기 때문에 발생한 이슈였다. 기본 제공 코드에 answer가 괜히 long[]인 것이 아니었다. 결국 x*(i+1) 앞에 (long)을 붙여주어 해결할 수 있었다.

 

 

★ 정답 코드

public class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for(int i = 0; i < n; i++)
        {
            answer[i] = (long)x*(i+1);
        }
        return answer;
    }
}