728x90
[문제 설명]
정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
[입출력 예]
n | k | result |
10 | 3 | [3, 6, 9] |
15 | 5 | [5, 10, 15] |
[차근 차근 생각해보기]
- answer 배열의 길이를 n을 k로 나눈 몫의 길이로 정해준다. (왜냐하면 k의 배수가 나오기 때문)
- n까지 돌면서 i를 k로나눈 나머지가 0 일 경우(i이 k의 배수일 경우)
- i를 answer에 넣어준다.
- 이때 answer는 i를 k로 나눈 후 - 1을 해준다.
- i가 3 , k가 3일 경우 -> i / k = 1이고
- 배열의 인덱스는 0부터 시작하기 때문에 1을 빼준다.
[코드]
class Solution {
public int[] solution(int n, int k) {
int[] answer = new int[n / k];
for(int i = 1; i <= n; i++){
if(i % k == 0){
answer[(i / k) - 1] = i;
}
}
return answer;
}
}
<잘못 작성한 코드>
class Solution {
public int[] solution(int n, int k) {
int[] answer = new int[n / k];
for(int i = 1; i <= k; i++){
if((k * i ) <= n){
answer[i - 1] = k * i;
}
}
return answer;
}
}
[반성할 점]
처음에 단순히 k까지 돌면서 k * i가 n보다 작거나 같으면 k * i를 answer에 넣어주는 방법을 택했다.
이 방법은 테스트 케이스는 통과 했지만 답안 제출 시 통과하지 못해 생각해보았다.
내가 잘못 작성한 코드는 만약 n이 100이고 k는 5일 경우 총 20개의 원소가 나와야 하는데,
k까지 돌게 되면 5까지 돌게 되어 [5, 10, 15, 20, 25] 총5개의 원소가 나와 때문에 틀린 답안 이었다.
그래서 n까지 돌면서 i가 k의 배수일 경우 i를 answer에 넣어주는 방법을 택했고,
배열은 0부터 시작하기 때문에 i를 k로 나눈 몫에서 - 1을 해주었다.
-> i가 10 k 5일 경우[(i / k) - 1]은 [2 - 1] 이 되어 1이 될 것이다.
이런 테스트 케이스는 통과하지만 다른 부분에서 오류 찾는 법이 아직 많이 약하다.
조금 더 천천히 깊게 고민해보는 습관을 들여야겠다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 배열 비교하기 (0) | 2023.06.27 |
---|---|
[프로그래머스] - 뒤에서 5등 위로 (0) | 2023.06.27 |
[프로그래머스] - n 번째 원소부터 (0) | 2023.06.19 |
[프로그래머스] - 글자 이어 붙여 문자열 만들기 (0) | 2023.06.19 |
[프로그래머스] - 카운트 업 (0) | 2023.06.14 |