본문 바로가기
codingtest

[programmers] 잘라서 배열로 저장하기, 7의 개수, 문자열 정렬하기(2), 세균 증식, 제곱수 판별하기

by 안자두 2023. 3. 3.

📝 [Lv0] 잘라서 배열로 저장하기

👀 문제 설명

문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return 하도록 solution 함수를 완성해 주세요.

 

🚨 제한 사항

  • 1 ≤ my_str의 길이 ≤ 100
  • 1 ≤ n  my_str의 길이
  • my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

 

💻 입출력 예


"abc1Addfggg4556b" 6 ["abc1Ad", "dfggg4", "556b"]
"abcdef123" 3 ["abc", "def", "123"]
 

✨ 풀이 설명

우선 문제를 보는 순간 splice가 떠올랐다.

기존 배열을 변경하기 때문에 잘라낸 부분은 join으로 문자열로 변환하여 answer 배열에 추가해 주면, 기존 my_str을 배열로 변환한 my_list에서도 answer 부분에 들어간 만큼은 없어지게 된다.
(스네이크 케이스 꽤나 심기 불편하네요)

그래서 my_list가 존재할 때까지, n 만큼씩 잘라 answer에 넣어주고 해당 배열을 반환해 주었다.

다른 분의 풀이를 보니 정규식으로 깔끔하게 해결할 수도 있겠다는 생각이 들었다.

 

🕵️‍♂️ 코드

function solution(my_str, n) {
  const answer = [], my_list = [...my_str];
  while (my_list.length) {
    answer.push(my_list.splice(0, n).join(''));
  }
  return answer;
}

 

 


📝 [Lv0] 7의 개수

👀 문제 설명

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해 보세요.

 

🚨 제한 사항

  • 1 ≤ array의 길이 ≤ 100
  • 0 ≤ array의 원소 ≤ 100,000

 

💻 입출력 예


[7, 77, 17] 4
[10, 29] 0

 

✨ 풀이 설명

위의 문제에서 다른 분이 정규식으로 풀었던 것이 생각나 정규식을 사용해 보았다.

우선 검색하기 편하게 배열 안 문자열을 join으로 합쳐주었다.

그리고 match 함수를 사용하여 문자열 안의 모든 7을 찾았다. 만약 7이 없다면 null이 반환되기 때문에 length를 구할 수 없다.
그렇기 때문에 길이를 구할 수 있는 경우에만 length를 구하기 위해, optional chaining을 사용했다.

구할 수 없다면 7이 없다는 뜻이므로, 0을 반환해 주었다.

 

🕵️‍♂️ 코드

function solution(array) {
  return array.join('').match(/7/g)?.length || 0;
}

 

 


📝 [Lv0] 문자열 정렬하기(2)

👀 문제 설명

영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

 

🚨 제한 사항

  • 0 < my_string 길이 < 100

 

💻 입출력 예


"Bcad" "abcd"
"heLLo" "ehllo"
"Python" "hnopty"

 

✨ 풀이 설명

이번 문제는 하라는 대로 직관적으로 풀었다.

우선 문자열을 toLowerCase()를 사용해 모두 소문자로 변경시켜 주었다. 그 후, 문자열을 배열로 변환시켜 정렬해 주었다. sort()는 기본적으로 문자열 비교를 하기 때문에 다른 옵션 없이 사용하였다. 그 후, 다시 문자열로 변환해 반환해 주었다.

 

🕵️‍♂️ 코드

function solution(my_string) {
  return [...my_string.toLowerCase()].sort().join('');
}

 


📝 [Lv0] 세균 증식

👀 문제 설명

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • 1 ≤ n ≤ 10
  • 1 ≤ t ≤ 15

 

💻 입출력 예


2 10 2048
7 15 229,376

 

✨ 풀이 설명

기본값에 2의 n제곱을 곱해주면 된다. 거듭제곱의 우선순위가 더 높기 때문에 괄호를 치지 않아도 된다.

다른 분의 풀이 중, 2진수 임을 캐치하고 shift 연산자를 사용한 것이 신기했다.

 

🕵️‍♂️ 코드

function solution(n, t) {
  return n * 2 ** t;
}

 


📝 [Lv0] 제곱수 판별하기

👀 문제 설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • 1 ≤ n ≤ 1,000,000

 

💻 입출력 예


144 1
976 2

 

✨ 풀이 설명

js의 제곱근 함수를 사용하여 값을 구해준 후, 이 값이 정수인지 확인해 주었다.

Math.floor()을 사용하여 내림했을 때의 값과 동일한지 확인했는데, 다른 분의 풀이에서 isInteger()을 사용하여 정수인지 바로 확인할 수 있다는 것을 알게 되었다.
(멋져)

 

🕵️‍♂️ 코드

function solution(n) {
  return Math.sqrt(n) === Math.floor(Math.sqrt(n)) ? 1 : 2;
}

 

728x90