728x90
반응형
안녕하세요. 민쯔입니다.😊
오랜만에 프로그래머스 연습문제 해결방안을 올리네요ㅠㅠ
이렇게 오랫동안 안 올릴 생각은 아니었는데....😥
[1차] 다트 게임이 몇주째 안 풀려서 결국 다른 문제를 풀게 됐어요.🤣
그래도 다른 문제라도 풀었으니까
같은 숫자는 싫어 해겳방안에 대해 설명하겠습니다.
이번 문제는 어떻게 보면 쉽긴 한데 묘하게 머리 쓰게 만드는 문제인 것 같아요.
이문제가 단순하게 중복을 제거하는 문제가 아니라
연속적인 부분만 제거하는 문제라 조금 까다롭더라구요.
- arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1]을 return
- arr = [4, 4, 4, 3, 3] 이면 [4, 3]을 return
function solution(arr)
{
var answer = [];
for(let i=0; i<arr.length; i++){
if(arr[i] == arr[i+1]){
continue;
}else{
answer.push(arr[i])
}
}
return answer;
}
이 문제 풀이 방법은
for문으로 돌려서 배열의 원소가 뭔지 알아내고
연속적으로 나타내는 숫자를 파악하기 위해
if(arr [i] == arr [i+1])
를 사용하였고,
현재 원소와 다음 원소가 같다면 다음 차례로
아닐 경우 그 자리 원소를 배열 answer에 push를 사용해서 넣습니다.
자세히 설명하자면
arr = [1, 1, 3, 3, 0, 1, 1]이라면
for문으로
- i = 0 -> 1
- i = 1 -> 1
- i = 2 -> 3
- i = 3 -> 3
- i = 4 -> 0
- i = 5 -> 1
- i = 6 -> 1
i=0일 경우
- if(arr [i] == arr [i+1]) -> if(arr [0] == arr [1])
- 둘 다 1이므로 continue;
i=1일 경우
- if(arr [i] == arr [i+1]) -> if(arr [1] == arr [2])
- arr [1]은 1, arr [2]는 3 다르므로
- answer.push(arr [i]) -> answer.push(arr [1]) -> answer.push(1)
- answer = [1]
i=2일 경우
- if(arr [i] == arr [i+1]) -> if(arr [2] == arr [3])
- 둘 다 3이므로 continue;
i=3일 경우
- if(arr [i] == arr [i+1]) -> if(arr [3] == arr [4])
- arr [3]은 3, arr [4]는 0 다르므로
- answer.push(arr [i]) -> answer.push(arr[3]) -> answer.push(3)
- answer = [1, 3]
i=4일 경우
- if(arr [i] == arr [i+1]) -> if(arr [4] == arr [5])
- arr [4]은 0, arr [5]는 1 다르므로
- answer.push(arr [i]) -> answer.push(arr[4]) -> answer.push(0)
- answer = [1, 3, 0]
i=5일 경우
- if(arr [i] == arr [i+1]) -> if(arr [5] == arr [6])
- 둘 다 1이므로 continue;
i=6일 경우
- if(arr [i] == arr [i+1]) -> if(arr [6] == arr [7])
- arr [6]은 1, arr [7]은 undefined 임으로 두 개의 값이 다름
- answer.push(arr [i]) -> answer.push(arr[4]) -> answer.push(0)
- answer = [1, 3, 0, 1]
728x90
반응형
'코딩 > 프로그래머스 코딩테스트' 카테고리의 다른 글
[프로그래머스] 두 정수 사이의 합 (0) | 2022.01.04 |
---|---|
[프로그래머스] 나누어 떨어지는 숫자 배열 (0) | 2021.12.29 |
[프로그래머스] 가운데 글자 가져오기 (0) | 2021.12.09 |
[프로그래머스] 비밀지도 (0) | 2021.12.08 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (0) | 2021.11.20 |