프로그래머스 문제 풀어보기(배열)

dory·2021년 4월 1일
0

TIL_JS

목록 보기
5/6

k번째 수

문제

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

풀이

function solution(array, commands) {
    let answer = [];

    for (let command of commands){
    let sliceArr = array.slice(command[0]-1,command[1]);
    let sortArr = sliceArr.sort((a,b)=>{return a-b});
    
    answer.push(sortArr[command[2]-1]);
    }
    return answer;

}
  • 처음에 commands가 하나의 배열로 들어가는 줄 알고 함수를 짰다가 계속 실패했었다. 어우.. 확인을 잘하자!
  • .slice로 부분을 가져와서 .sort로 정리한 후 answer array에 값을 담았다.

    splice & slice & split

    • splice
      - 기존의 배열을 ctrl x, v하는 느낌
      - 계속 헷갈리니까 P피자는 먹으면 없어진다고 외워야지
    • slice
      - 기존 배열을 ctrl c, v하는 느낌
      - 복사해도 원래 값은 남아있으니까

    • split 문자열을 배열로 담아오기
      기준이 될 단위 정해야함
      -replace(a,b) 부분 수정

가장 큰 수

문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

풀이 : 실패

function solution(numbers) {
    var answer = numbers.sort().reverse().join('');
    return answer;
}
  • 앞자리가 클 수록 수가 커지니까 기본 sort에 reverse하고 합치면 될 줄 알았는데 안 된다.. ㅎㅎ 모르겠어~~

가운데 글자 가져오기

문제

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

풀이

function solution(s) {
  let answer = "";
  if (s.length % 2 == 0) {
    answer = s[s.length / 2 - 1] + s[s.length / 2];
  } else {
    answer = s[Math.floor(s.length / 2)];
  }
  return answer;
}
  • 홀짝 나눠서 조건 주기!
  • Math.floor를 해도 되고, -0.5를 해도 된다.

    Math.floor 소수점 자르기
    바닥 쓸기
    Math.ceil 올림
    천장으로 올리기
    Math.round 가장 비슷한 수 반환
    대략 제일 비슷한거


    Math.floor 응용
    랜덤 숫자 가져오기
    => Math.floor(Math.random( )*10)+1


서울에서 김서방 찾기

문제

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

풀이

function solution(seoul) {
    let answer = `김서방은 ${seoul.indexOf('Kim')}에 있다`
    return answer;
}

indexOf() : 해당 값의 인덱스 호출, 같은 값이 여러 개라면 첫 번째 값의 인덱스가 호출됨


평균 구하기

문제

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

풀이

function solution(arr) {
    let total = arr.reduce((sum,crr) => sum + crr, 0)
    let answer = total / arr.length;
    return answer;
}
  • reduce로 총합을 구하고, 배열 개수로 나누면 평균!

    reduce()
    - 배열 안의 값을 단일 값으로 만들어줘서 reduce인가보다
    -옵션으로 초기값을 설정할 수 있는데, 없으면 배열의 첫번째 인덱스로 설정됨

0개의 댓글