[Programmers 알고리즘][연습문제] 같은 숫자를 싫어 (p.s. 프로그래머스 후기)

2020. 3. 12. 00:02Algorithm

반응형

이번 문제는 너무 쉬운데 왜 굳이 포스팅을 하는지 주저리 좀 떠들어 보고 싶다😅

그리고 백준 -> Programmers 이동기, 더불어 쉬운 문제 부터 다시 푸는 이유 및 느낀점에 대해 이야기 해보고자 한다.

해당 내용은 맨 아래에 작성 해두었으니 참고해주세요🧐

 


문제설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예

arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

입출력 예 설명

입출력 예 #1,2
문제의 예시와 같습니다.


문제 풀이

  • 반성점 : 문제 좀 제대로 읽자. (너무 쉬워보여서 대충 읽었더니, 연속된 배열의 수인데 첨에 중복된 배열의 수로 알고 풀었다. )
  • 키워드 : 순서 유지 (앞 -> 뒤로 순회하는 프로토타입 사용하면 된다.)

reduce 활용

Reduce 누산기 사용하여 이전 값의 마지막 원소와 현재 원소 비교해서 일치하면 넣어주었다.

하지만 이 방식은 Reduce안에 조건문 추가 👉 만족시 배열에 원소 추가 👉 누적 배열 리턴... 이라는 불필요한 처리가 많다.

function solution(arr)
{
    return arr.reduce((acc, e) => {
        if (acc[acc.length-1] !== e) acc.push(e);
        return acc;
    }, []);
}

 

filter 활용

다른 사람의 코드 보고 띠용 했던 건데

filter의 두번째 파라미터가 인덱스라는 것을 활용해서 현재 원소 다음 값에 접근하여 비교, 중복이 아닐 경우에만 넣어주면 된다.

filter는 조건에 해당하면 바로 리턴 배열에 넣어버리기 때문에 내부에 조건식 하나만 선언하면 끝이다.

function solution(arr)
{
    return arr.filter((e, i) => arr[i+1] !== e);
}

🗣 주저리

JS 언어를 사용하는 이유 = 쉬운 알고리즘 부터 다시 푸는 이유

취직을 하면서 생전 해보지 못한 웹 개발을 시작하게 되었는데,

원래도 잡식성이었던지라 정체성에 혼란을 더 겪고 있었는데 (지금 더 혼란스럽긴 하지만...)

기왕 시작한 웹 개발을 제대로 해보고 싶단 생각이 들었다.

접근성도 쉽고 비 전공자들도 입문으로 시작하는 웹 개발을 취직 후에 시작하다니 너무 늦은 거 아닌가 싶지만

웹 개발을 하는 사람이 많지만, 제대로 하는 사람은 적다는 사수님의 말씀이 인상 깊기도 했고

js가 점점 다른 객체지향 언어들 만큼 복잡하고도 다양한 기능을 갖춘 언어로 계속 진화해나가는걸 보면서

주 언어로 삼는 것도 나쁘지 않겠다 싶었다.

아직 java가 훨~씬 편해서  js 문법에 익숙해지자는 마음으로! 당연하게도 Level 1 부터 시작하고 있다.

너무 오래 알고리즘을 안 했더니 머리가 다 굳기도 했고, js언어로 푸는 알고리즘은 처음이니깐!

 

백준 -> Programmers로 이동한 이유

백준에서 Programmer로 이동한 이유는 단순히 js 지원이 되어서다. (js로 풀어보고자 마음 먹었으니깐!)

물론 문제 수나 데이터의 양은 백준보다 현저히 적지만

UI/UX를 중요하게 생각해서 그런지 뭔가 웹 페이지나 기능 접근이 더 내 스타일이다. 직관적

레벨1, js 필터링해서 많이 푼 순서대로 풀어보고 있는데 괜찮다.

 

그리고 코테를 많이 하다보면 알겠지만, 실제 프로그래머스를 사용해 코딩테스트를 보는 곳도 굉장히 많다.

실제로 실전 문제들을 제공해주기도하고, 실제 코테처럼 내 실력 평가할 수 있는 서비스도 있다.

특히 웹 개발자 취업 지원들이 잘 되어 있는 것 같아서 이 곳에서 연습을 하며 쌓은 내 데이터들을 추후 이직을 고려할 때도 활용할 수 있을 것 같단 생각이 든다.

아주 큰 매력 포인트 인 것 같다.🙃

 

제일 좋은거! 😘프로그래머스로 풀고 나면 다른 사람들의 코드를 볼 수 있는데 이게 아주 많은 자극제가 되어주고 있다.

js에 익숙하지 않고 굳은 뇌로 겨우겨우 푼 코드를 보다가

js 마스터들의 간단한 코드, 혹은 알고리즘 장인들의 코드, 가독성이 좋은 코드 등.... 보는 재미가 쏠쏠하다

그래서 요즘은 아래와 같은 순서대로 학습을 진행하고 있는데 큰 도움이 된다.

  1. 문제 정리해보고 혼자서 풀어보기 (최대한 옛날 버전의 언어로)
  2. 해결했다면, es6 문법 적용해서 풀어보기
  3. 다른 사람들은 얼마나 깔끔하게 풀었을까 기대하면서 다른 사람의 풀이보기
  4. 댓글 보면서 좋은 코드보며 같이 감탄하기
  5. 다른 사람들이 썼던 코드에 사용된 익숙치 않은 메소드 등 학습. 똑같이 재현해서 풀어보기
  6. 이 모든 내용 블로그에 정리하면서 복습하기

그래서 오랜만에 시작하시는 저 같은 직장인 분들이나

갓 시작한 취준 입문생들 이런식으로 해보면 좋을 것 같아요! 😁

 

 

반응형