[문제 설명]
최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트 names가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.
[입출력 예]
names | result |
["nami", "ahri", "jayce", "garen", "ivern", "vex", "jinx"] | ["nami", "vex"] |
[차근 차근 생각해보기]
- 배열 names의 길이까지 돌면서 5번째 마다 값을 보여주어야 하기 때문에 i에 5씩 증가시켜준다.
- answer 배열에 담아주기 위해 answer 배열의 길이를 names의 길이 나누기 5를 한 뒤 올림을 해준다.
- answer 배열에 순서대로 담아주기 위해 index 변수를 선언하여 1씩 증가하도록 한다.
- answer를 return 해준다.
[코드]
<수정 전>
class Solution {
public String[] solution(String[] names) {
String[] answer = new String[(names.length / 5) + 1];
int index = 0;
for(int i = 0; i < names.length; i+=5){
answer[index++] = names[i];
}
return answer;
}
}
<수정 후>
class Solution {
public String[] solution(String[] names) {
String[] answer = new String[(int) Math.ceil((double)names.length / 5)];
int index = 0;
for(int i = 0; i < names.length; i+=5){
answer[index++] = names[i];
}
return answer;
}
}
[반성할 점]
처음에 코드를 돌려보니 test 케이스는 통과하여 답안 제출을 하였다. 하지만 틀린 답이라고 하여 며칠을 고민 했다.
고민해도 답이 나오지 않아 도움을 구해보니 내가 answer배열의 길이를 잘못 구했었다.
만약 names 배열의 길이가 5라면 answer의 길이는 1이 될 것이다.
하지만 내가 작성한 '(names.length / 5) + 1' 을 하게 되면 answer 배열의 길이가 2로 선언 될 것이다.
그래서 names의 길이에서 5로 나눈 몫을 한 뒤에 올림을 해주면 names의 길이가 5일 경우 answer에도 1개의 원소가 담길 것이고, 5초과 일 경우 올림이 되어 answer 배열의 길이가 선언될 것이다.
아직 테스트 케이스는 통과하는데 답이 아닐 경우 왜 답이 아닌지 찾기가 너무 힘들다..😭
이번 문제의 문제점을 꼭 기억해서 비슷한 경우가 있을 때, 해결해보아야겠다..
아..! 그리고 Math.ceil의 메소드엔 double 타입이기 때문에 꼭 괄호 안엔 double 타입으로 들어가야한다..
요거 때문에 다 풀고도 오류나서 한참 헤멨다..😓
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 왼쪽 오른쪽 (0) | 2023.09.20 |
---|---|
[프로그래머스] - ad 제거하기 (0) | 2023.07.12 |
[프로그래머스] - 배열 비교하기 (0) | 2023.06.27 |
[프로그래머스] - 뒤에서 5등 위로 (0) | 2023.06.27 |
[프로그래머스] - 배열 만들기 1 (0) | 2023.06.22 |