개발자 혜진
꾸준하게 개발 블로그
개발자 혜진
05-24 00:18
전체 방문자
오늘
어제
  • 전체보기 (69)
    • 코딩테스트 (25)
    • HTML (1)
    • CSS (6)
    • React (3)
    • Vue (8)
    • Javascript (9)
    • Java (3)
    • IDE (1)
    • Toy Project (10)
    • 개발 서적 (2)
    • 개발 이야기 (0)
    • TMI (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

인기 글

태그

  • 8진수2진수
  • 박스가운데정렬
  • 뷰티파이
  • styled-component focus out
  • 프로그래머스 3진법뒤집기
  • 이상한문자만들기 js
  • 시저암호javascript
  • input Foucs Out
  • javascript 진수
  • springboot mustache 한글 깨짐
  • classList메소드
  • spring boot 한글 깨짐
  • 프로그래머스0
  • vue2
  • 텍스트에이미지적용
  • js 진수변환
  • 프로그래머스
  • react
  • 프로그래머스예산
  • 가로가운데정렬
  • div가운데정렬
  • 텍스트에그라데이션
  • 클래스 토글
  • Java초기화
  • 드로잉윗유
  • 예산js
  • TypeScript기본문법
  • vuetify
  • 시저암호js
  • vue2캘린더 만들기

최근 글

hELLO · Designed By 정상우.
개발자 혜진

꾸준하게 개발 블로그

코딩테스트

[코딩테스트]배열 회전 시키기

2022. 10. 18. 15:19

문제 설명

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ numbers의 길이 ≤ 100
  • direction은 "left" 와 "right" 둘 중 하나입니다.

입출력 예numbersdirectionresult
[1, 2, 3] "right" [3, 1, 2]
[4, 455, 6, 4, -1, 45, 6] "left" [455, 6, 4, -1, 45, 6, 4]

입출력 예 설명

입출력 예 #1

  • numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.

입출력 예 #2

  • numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.
function solution(numbers, direction) {
    let saveNum = numbers[numbers.length-1]
    if(direction === 'right'){
        numbers.unshift(saveNum)
        numbers.splice(numbers.length-1, numbers.length)
    }else{
        saveNum = numbers[0]
        numbers.shift()
        numbers.splice(numbers.length, numbers.length, saveNum)
    }
     return numbers
}

저는 이문제를 해결할때에, saveNum이라는 변수를 하나 만들어주고, saveNum함수에 numbers의 맨 끝 값을 저장해주었습니다. 그리고 만약 direction이 right이면, numbers의 맨 앞에 saveNum에 저장되어있는 값을 넣어주고, 맨뒤의 값을 빼주는 걸로 해결하였고, 만약 left라면 맨 앞의 인덱스의 값을 saveNum에 저장시켜주고, shift()로 맨앞의 값을 제거해주고, splice를 사용해 saveNum의 저장되어있는 변수값을 넣어 주는것으로 해결 하였습니다.

function solution(numbers, direction) {
    const numberLength = numbers.length;
    let saveNum = numbers[numberLength-1];
    if(direction === 'right'){
        numbers.unshift(saveNum);
        numbers.splice(numberLength, numberLength);
    }else{
        saveNum = numbers[0]
        numbers.shift()
        numbers.splice(numberLength, numberLength, saveNum)
    }
     return numbers
}

또 매번 numbers의 length를 구해와라 라고하는 방법이 메모리 영역에서 좋지 않을것 같아 변수를 할당해줬습니다. 

그렇지만 코드가 쓸데없이 긴 감이있어 다른분들의 코드에서 조금더 효율적으로 구현해내는 방법을 공부 했습니다.

function solution(numbers, direction) {
  return direction === "right"
    ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]
    : [...numbers.slice(1), numbers[0]];
}

저의 엄청 긴 코드를 간단하게 3줄로 구현할수가 있다는 것을 느끼고 공부를 더 열심히 해야겠다라고 생각했습니다.

 

저작자표시 비영리 변경금지 (새창열림)

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 암호 해독  (0) 2022.11.12
[코딩테스트]주사위의 개수  (0) 2022.10.27
[코딩테스트] 순서쌍의 개수  (0) 2022.10.18
[코딩테스트] 배열의 유사도  (0) 2022.10.15
[코딩테스트] 제곱수 판별하기  (0) 2022.10.15
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 암호 해독
    • [코딩테스트]주사위의 개수
    • [코딩테스트] 순서쌍의 개수
    • [코딩테스트] 배열의 유사도
    개발자 혜진
    개발자 혜진
    잊어버리지 않기위한 개발 블로그

    티스토리툴바