코딩테스트 : (복습)

Edwin·2023년 2월 14일
0
post-thumbnail

나는 과연 풀 수 있을 것인가?

1) 피자 나눠먹기(3)

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100

문제읽기

1) 머쓱이네 피자가게는 피자를 2~10조각까지 원하는 조각으로 수를 나눠준다.
2) 피자를 나눌 조각의 크기(slice)과 피자를 먹는 사람(n)이 주어질 때
3) n명이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는가?

쉽게 풀었다. 바로 Math.ceil() 메소드를 사용해서 나눈 값을 올림해주면 되는 간단한 문제였다. 다만 풀이가 진행되지 않았는데, 프로그래머스의 함수명이 solution이 아니면 문제가 풀어지지 않는다.

function solution(slice, n) {
    return Math.ceil(n/slice)}

2) 머쓱이보다 키 큰 사람

머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ height ≤ 200
  • 1 ≤ array의 원소 ≤ 200

문제읽기

1) 머쓱이네 반 친구들의 키가 담긴 배열(array, 매개변수1)이 있다.
2) 머쓱이의 키가 매개변수로 주어질 때(height, 매개변수2) 머쓱이보다 키 큰사람의 수를 리턴해라.

function solution(array, height) {
  console.log((array.filter(hei => hei > height)).length)
  return (array.filter(hei => hei > height)).length}

3) 배열 원소의 길이

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ strlist 원소의 길이 ≤ 100
  • strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.

문제읽기

1) 문자열 배열 strlist, 각 원소의 길이를 담은 배열을 return 해 봅시다.

function solution(strlist) {
  return strlist.map(str => str.length)}

4) 짝수는 싫어요

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 100

문제읽기

1) 매개변수 n이 주어셨을 때, n 이하의 홀수가 오름차순으로 정렬되도록 문제를 풀어보자.

function solution(n) {
  let obb = [];
  for(let i=1;i < n+1; i++) {
    if(!((i%2) == 0)) {obb.push(i)}}
  return(obb)
  }   

5) 배열 뒤집기

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ num_list의 길이 ≤ 1,000
  • 0 ≤ num_list의 원소 ≤ 1,000
function solution(num_list) {
    return num_list.reverse()}

그런데 어떻게 작동하는 방식일까?

function solution(num_list) {
	let reverselist = ;
	for(let i=num_list.length-1;i>=0; i--) {
    reverselist += num_list[i]
}

6) 나머지 구하기

정수 num1, num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100
function solution(num1, num2) {
    return num1%num2
}

7) 두 수의 차

정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

제한사항

  • -50000 ≤ num1 ≤ 50000
  • -50000 ≤ num2 ≤ 50000
function solution(num1, num2) {
    return num1-num2
}

8) 두 수의 곱

정수 num1, num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 0 ≤ num1 ≤ 100
  • 0 ≤ num2 ≤ 100
function solution(num1, num2) {
    return num1*num2
}

9) 두 수의 곱

정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100
function solution(num1, num2) {
    // 방법1
    // return parseInt(num1/num2)

    // 방법2
    // return Math.floor(num1/num2)
}

단순히 나누기만 하면, 소수점까지 나오기 때문에, 소수점은 버리고, 정수만 출력해보자. 또한 소수점 내림도 좋은 방법이다.


10) 숫자 비교하기

정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

제한사항

  • 0 ≤ num1 ≤ 10,000
  • 0 ≤ num2 ≤ 10,000
function solution(num1, num2) {
    return (num1 == num2) ? 1 : -1
}

그동안 배운 내용들이 있어서 조건부 삼항 연산자를 사용해서 문제를 풀어보았다.


10) 숫자 비교하기

정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 soltuion 함수를 완성해주세요.

제한사항

  • -50,000 ≤ num1 ≤ 50,000
  • -50,000 ≤ num2 ≤ 50,000
function solution(num1, num2) {
    return num1+num2
}

11) 나이 출력

머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 나이 age가 주어질 때, 2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요.

제한사항

  • 0 < age ≤ 120
  • 나이는 태어난 연도에 1살이며 1년마다 1씩 증가합니다.
function solution(age) {
    return 2022-age+1
}

12) 각도기

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

  • 예각 : 0 < angle < 90
  • 직각 : angle = 90
  • 둔각 : 90 < angle < 180
  • 평각 : angle = 180

제한사항

  • 0 < angle ≤ 180
  • angle은 정수입니다.
function solution(angle) {
   if(angle < 90) {return 1} 
   else if(angle == 0) {return 2} 
   else if(angle < 180) {return 3} 
   else if(angle == 180) {return 4}
}

그런데 틀렸다? 왜지 뭐가 틀렸지. 제한 사항도 학인 했고, 변수는 정수로 들어온다. 소수점이 없는 자연수인데, 무엇이 문제일까?

function solution(angle) {
    if(0 < angle && angle < 90) {
        return 1
    } else if(angle === 90) {
        return 2
    } else if(90 < angle && angle < 180) {
        return 3
    } else {
        return 4
    }
}

예각과 둔각에 대해서 && 를 통해서 경로를 더 세부적으로 설정해줘야 하나보다. 그래서 다른 풀이를 보았다. 조건이 여러 개일 때, 삼항 연산자를 사용할 수 있을까? 방법이 있었다. 대단한 사람들. 그래도 조건부 삼항 연산자를 이와 같이 할 수 있다는 새로운 관점을 배워간다.

function solution(angle) {
    return angle < 90 ? 1 : angle == 90 ? 2 : angle < 180 ? 3 : 4
}

return 조건1 ? 값1 : 값2
return 조건1 ? 값1 : 조건2 ? 값2 : 값3
return 조건1 ? 값1 : 조건2 ? 값2 : 조건3 ? 값3 : 값4

이러한 방법으로 여러개의 조건을 삼항 연산자로 해결 할 수 있었다.


13) 두 수의 나눗셈

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100
function solution(num1, num2) {
    return parseInt((num1/num2)*1000)
}

14) 짝수의 합

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 0 < n ≤ 1000
function solution(n) {
    let even = [] 
    for(let i=0;i<n+1;i++) {
        if((i%2) == 0) {
      even.push(i)}}
      
    console.log(even.reduce((prev, cal) => prev + cal))
    return even.reduce((prev, cal) => prev + cal) ;
}

map 메서드는 배열 메서드 이기에 숫자열에서는 사용할 수 없다. 그러기에, 반복문으로 배열을 만든 다음에, 배열로 들어온 짝수를 reduce 메서드를 통해서 누계처리를 했다. 그런데 숫자열로 들어온 내용을 반복문으로 나누는 것 말고 좋은 방법은 없을까?

reduce는 사실 과했다. 배열에 추가 하는 것이 아니라 숫자에 연산자를 통해서 했으면 되었는데, 이렇게 연산자를 사용하는 방법이 익숙하지 않아서 즉각적으로 떠오르지 않는다.

function solution(n) {
    let even = 0;
    for(let i=0;i<n+1;i++) {
        if((i%2) == 0) {
      even += i
      
    return even ;
}

15) 배열의 평균값

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
function solution(numbers) {
    return (numbers.reduce((prev, curr) => prev+curr))/numbers.length;
}

평균 전체를 더하고, 전체의 갯수로 나누면 되는 간단한 문제였다. 그런데 순간 멘탈이 나갔다. 시계를 보니 오늘도 새벽 1시구나.


16) 양꼬치

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 0 < n < 1,000
  • n / 10 ≤ k < 1,000
  • 서비스로 받은 음료수는 모두 마십니다.

양꼬치 10인분을 먹으면 음료수 하나를 서비스를 준다. 계산하자.

function solution(n, k) {
    let service = parseInt(n/10)
    return n*12000 + (k-service)*2000;
}

다른사람의 풀이를 살펴보니 parseInt(n/10)를 바로 사용하고 서비스라는 변수를 사용하지 않아도 되었다.

function solution(n, k) {
    return n*12000 + (k-parseInt(n/10))*2000;
}

17) 피자 나눠 먹기(1)

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

제한사항

  • 1 ≤ n ≤ 100
function solution(n) {
    return Math.ceil(n/7)
}

소수점 올림을 쓰면 되지 않은가. 올림(ceil), 내림(floor), 반올림(round)


18) 점의 위치 구하기

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다. x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

제한사항

  • dot의 길이 = 2
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • -500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.
function solution(dot) {
    return dot[0] > 0 && dot[1] > 0 ? 1 : dot[0] < 0 && dot[1] > 0 ? 2 : dot[0] < 0 && dot[1] < 0 ? 3: 4;}

조건부삼항연산자, 완벽하게 익혔다.


19) 없는 숫자 더하기

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ numbers의 길이 ≤ 9
  • 0 ≤ numbers의 모든 원소 ≤ 9
  • numbers의 모든 원소는 서로 다릅니다.
function solution(numbers) {
  let num=0;
  for(let i=0;i<10;i++) {
    if(!(numbers.includes(i))) {
      num += i
    }
  }
  console.log(num)
  return num
}

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열라는 조건이 주어졌다. 그러기에 그 안에서 numbers에 해당 내용이 포함되면 let numd에 += 계속 더해주고 한 후에, 결과를 산출해 주면 된다.

profile
신학전공자의 개발자 도전기!!

0개의 댓글