코딩/프로그래머스 코딩테스트

[프로그래머스] 같은 숫자는 싫어

민쯔 2021. 12. 28. 20:48
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
반응형