본문 바로가기
codingtest

[programmers] 나이 출력, 피자 나눠 먹기 (1), 피자 나눠 먹기 (2), 피자 나눠 먹기 (3), 숨어있는 숫자의 덧셈 (1)

by 안자두 2023. 4. 2.

📝 [Lv0] 나이 출력

👀 문제 설명

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

 

🚨 제한 사항

  • 0 < age ≤ 120
  • 나이는 태어난 연도에 1살이며 1년마다 1씩 증가합니다.

 

💻 입출력 예

age result
40 1983
23 2000

 

✨ 풀이 설명

기준 년도가 정해져있어 간단하게 뺄셈으로 해결하였다. 만약 기준 연도가 없다면, getFullYear()를 사용한 아래 코드를 사용할 수도 있다. 문제 출제는 22년도 기준이라 현재는 23년이 되어 이 문제를 기준으로 한다면, 1을 빼주어야 하지만 말이다.

 

🕵️‍♂️ 코드

function solution(age) {
  return 2023 - age;
}

function solution(age) {
  return new Date().getFullYear() + 1 - age;
}

 


📝 [Lv0] 피자 나눠 먹기 (1)

👀 문제 설명

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

 

🚨 제한 사항

  • 1 ≤ n ≤ 100

 

💻 입출력 예

n result
7 1
1 1
15 3

 

✨ 풀이 설명

일곱 조각이 한 판인 피자를 n명이 먹기 위해 총 몇 판의 피자를 시켜야 적어도 한 명씩은 먹을 수 있는지에 대한 문제이다. 즉, 피자의 조각이 최소 n조각 이상이어야 한다.

피자는 한 판에 일곱 조각이기 때문에 n을 7로 나눴을 때를 올림하여 구하면 된다. Math.ceil() 함수를 사용해 주었다.

 

🕵️‍♂️ 코드

function solution(n) {
  return Math.ceil(n / 7);
}

 


📝 [Lv0] 피자 나눠 먹기 (2)

👀 문제 설명

머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

 

🚨 제한 사항

1 ≤ n ≤ 100

 

💻 입출력 예

n result
6 1
10 5
4 2

 

✨ 풀이 설명

위의 문제와 같은 시리즈의 문제이다. 이번에는 여섯 조각으로 잘린 피자를 남기지 않고, 모두 똑같이 나눠먹을 수 있는 최소 피자의 개수를 구하여야 한다.

따라서, n과 6의 최소공배수를 구하는 것이 이번 문제의 정답이다. 저번에 풀었던 유한소수 판별하기 문제에서 사용했던 최대공약수 구하는 함수를 사용해 주었다. 최소공배수는 두 수의 곱을 최대공약수로 나눈 것과 같기 때문이다.

최대공약수 GCD를 구한 후, n과 6을 곱한 것을 최대공약수로 나누면 n명이 먹을 수 있는 최소 피자 조각의 개수가 나온다.
6으로 나눠주어야 피자 조각이 아닌 피자의 개수를 구할 수 있기 때문에
n * 6 / GCD(n, 6) / 6
즉, n / GCD(n, 6) 가 된다.

 

🕵️‍♂️ 코드

function solution(n) {
  const GCD = (num1, num2) => (num2 > 0 ? GCD(num2, num1 % num2) : num1);
  return n / GCD(n, 6);
}

 


📝 [Lv0] 피자 나눠 먹기 (3)

👀 문제 설명

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

 

🚨 제한 사항

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

 

💻 입출력 예

slice n result
7 10 2
4 12 3

 

✨ 풀이 설명

이번 문제는 피자 나눠 먹기 시리즈의 마지막 문제이다. 이 문제는 피자 나눠 먹기 (1)에서 피자 조각의 개수가 변수로 바뀌었다는 점만 빼면 동일하게 풀 수 있다.
즉, 7의 위치를 변수로 두면 끝나는 문제이다.

 

🕵️‍♂️ 코드

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

 


📝 [Lv0] 숨어있는 숫자의 덧셈 (1)

👀 문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

 

💻 입출력 예

my_string result
"aAb1B2cC34oOp" 10
"1a2b3c4d123" 16

 

✨ 풀이 설명

my_string을 배열화한 다음, reduce()를 이용해 각 문자가 숫자로 바꿀 수 있는지 확인해 주었다. 이 문제에서는 Number.isInteger() 대신 Number.isNaN()을 사용할 수도 있다.

Number.isNaN()는 Not a Number 즉, 숫자가 아닌지를 판별하는 함수이다. 덧셈 연산자로 강제 형변환을 시켜준 문자가 숫자인지 아닌지를 판별하는 것이다.
만약 이 함수를 사용하게 되면, 삼항 연산자 뒷부분을 바꿔서 아래 코드처럼 작성할 수 있다.

 

🕵️‍♂️ 코드

function solution(my_string) {
  return [...my_string].reduce((sum, char) => Number.isInteger(+char) ? sum + +char : sum, 0)
}
function solution(my_string) {
  return [...my_string].reduce((sum, char) => Number.isNaN(+char) ? sum : sum + +char, 0)
}
728x90

'codingtest' 카테고리의 다른 글

[programmers] 기사단원의 무기  (0) 2023.04.06
[programmers] 덧칠하기  (0) 2023.04.03
[programmers] 추억 점수  (0) 2023.04.01
[programmers] 바탕화면 정리  (0) 2023.03.31
[programmers] 공원 산책  (0) 2023.03.30