[20230218_프로그래머스 알고리즘_Lv.1]

YunTrollpark·2023년 2월 18일
0

1. 제일 작은 수 제거하기

문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

제한 사항
• arr은 길이 1 이상인 배열입니다.
• 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

function solution (arr) {
  const array = [...arr]
  let number = 0
   number = array.sort((a,b) => a-b)[0]
  return arr.length === 1 ? [-1] : arr.filter((item) => item !== number)
}

// 해설
// 1. 먼저 array라는 변수 선언, number 변수 선언
// 2. number는 array에서 sort로 오름차순 정렬후 0번째 인덱스를 할당
// 3. 원본 arr의 길이가 1이면 [-1] 반환 그렇지 않으면 filter를 사용하여 number를 제외한 배열을 할당
// 다른 사람의 풀이가 너무 궁금해서 가져옴
function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)),1);
    if(arr.length<1)return[-1];
    return arr;
}
// Math 함수 아주 중요...!!! 이걸 활용하는 방법도 다음에 꼭 사용해보기!

2. 없는 숫자 더하기

문제 설명

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

제한 조건
• 1 ≤ numbers의 길이 ≤ 9
• 0 ≤ numbers의 모든 원소 ≤ 9
• numbers의 모든 원소는 서로 다릅니다.

function solution(numbers) {
  return 45 - numbers.reduce((a,b)=> a+b)
}
// 해설
// 1. 0-9까지 차례대로 더하면 45
// 2. 주어진 배열을 전부 더한값을 45에서 빼주면 없는 숫자의 합이 나옴!

3. 가운데 글자 가져오기

문제 설명

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

제한 조건
• s는 길이가 1 이상, 100이하인 스트링입니다.

function solution(s) {
return s.length % 2 === 0 ? s.slice(s.length / 2 - 1, s.length/2+1) : s[Math.floor(s.length / 2)]
}

// 해설
// 1. 받은 문자열을 나눠서 나머지가 0이면
// 받은 문자열에서 slice를 해서 자를 시작점울 받은 문자열에서 반으로 나눈거에 -1, 끝나는 점을 받은 문자열에 +1
// 2. 받은 문자열을 나눠서 나머지가 0이 아니면
// 받은 문자열의 길이를 나눈뒤 Math.floor 나머지를 버리고 해당 인덱스의 문자열을 반환!

4. 수박수박수박수박수박수?

문제 설명

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

제한 조건
• n은 길이 10,000이하인 자연수입니다.

function solution(n) {
const a = '수박'
let answer = ''
if(n === 1){
 answer = '수'
}  else if(n === 0){
  answer = ''
} else if(n % 2 === 0){
  answer = a.repeat(n/2)
} else if(n%2 !== 0 && n !== 1){
   answer = a.repeat(n-1).slice(0,n)
}
  return answer
}
// 해설
// 조건이... 10,000 이하의 자연수라서 일단 0과 1은 별도로 조건 처리
// 먼저 '수박'이라는 문자열을 변수로 a로 선언
// 1. n이 0이면 빈문자열 return
// 2. n이 1이면 '수' return
// 3. n이 짝수면 a를 n을 2로 나눈만큼 반복한 문자열을 return
// 4. n이 홀수면 a를 n-1만큼 반복후 slice로 시작 index는 0, 끝나는 인덱스는 n-1 문자열을 잘라서 return
var waterMelon = n =>'수박'.repeat(n/2) + (n%2 === 1 ? '수' : '')

// 이건 다른 사람 풀이인데 생각해보니까... 어차피 홀수면 무조건 끝에 '수'로 끝나니까 홀수면 '수박' 문자열의 반복을 본인의 몫만큼 해주고 끝에 '수' 하나만 붙여줘도 되네... 메모메모...

오늘도 힌트 안보고 머리 쥐어짜서 해결했다...
어제 Math 함수 써보기로 결심했는데 오늘 하나 써봤당 아주 유용...구욷
그와중에 맨마지막 문제 신박한 풀이 하나 더 있었는데 진짜 빵터졌다 ㅋㅋㅋ
근데 조건문이 10,000이하의 자연수니까 나같으면 '수박'을 5000반복한 문자열 하나 선언해서 slice로 5,000번반복한문자열.slice(0,인자로받은number) 했을것 같다!ㅋㅋㅋㅋㅋ
이제 슬슬 문제 푸는데 시간이 오래 걸리기 시작했다... 흑흑 아직 레벨1인데... 다음주에 진짜 유데미에 자료구조 강의산거 볼꺼다... 진짜...ㅎ...

profile
코딩으로 세상에 이야기하는 개발자

0개의 댓글