항해99

TIL 10 알고리즘 공부하자

kongom2 2021. 11. 9. 23:29

자연수 뒤집어 배열로 만들기 [23번 문제]

[문제설명]

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
[제한조건]

n은 10,000,000,000이하인 자연수입니다.

function solution(n) {
  let num = 30;
  console.log(n)
  console.log('-'.repeat(num))

  console.log(String(n))
  console.log(typeof String(n))
  console.log('-'.repeat(num))

  console.log(String(n).split(''))
  console.log('-'.repeat(num))

  console.log(String(n).split('').reverse())
  console.log('='.repeat(num))
  
  console.log(String(n).split('').reverse().map(i => parseInt(i)))
   return String(n).split('').reverse().map(i => parseInt(i))
}


[접근방식]

- 숫자를 split()으로 나누려 하니 안됨

- String()으로 문자 형 변환

- split()으로 나눔

- reverse()로 전환


[풀이]

map은 모든 요소에 똑같이 적용 되는 함수


[문제링크]
[다른사람풀이]


문자열 다루기 기본 [17번 문제]

[문제설명]

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.

예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
[제한조건]

s는 길이 1 이상, 길이 8 이하인 문자열입니다.

=> 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

function solution(s) {
    const len = s.length
    if (len === 4 || len === 6){
    return s.split('').every((c)=>!isNaN(c))
    }
    return false
}

[접근방식]
[풀이]
[문제링크]
[다른사람풀이]


서울에서 김서방 찾기 [18번 문제]

[문제설명]

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

seoul은 길이 1 이상, 1000 이하인 배열입니다.
seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
"Kim"은 반드시 seoul 안에 포함되어 있습니다.

=> Kim이 몇번째 인덱스에 노출되는지

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


[접근방식]

- indexOf
[풀이]
[문제링크]
[다른사람풀이]


완주하지 못한 선수 [20번 문제]

[문제설명]

수많은 마라톤 선수들이 마라톤에 참여하였습니다.

단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열

completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
[제한조건]

마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

=> completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

function solution(participant, completion) {
  participant.sort()
  completion.sort()
  for(let i = 0; i < participant.length; i++){
    if(participant[i] !== completion[i]){
      return participant[i]
    }
  }
}


[접근방식]

- sort()


[풀이]

1. 참가자와 완주자 배열 모두 정렬한다.

2. 참가자 배열의 길이만큼 반복해서 i 값을 만듬

3. 참가자 인덱스와 완주자 인덱스 비교

4. 비교 후 같지 않은 참가자만 리턴

 

[문제링크]
[다른사람풀이]


이상한 문자 만들기 [21번 문제]

[문제설명]

문자열 s는 한 개 이상의 단어로 구성되어 있습니다.

각 단어는 하나 이상의 공백문자로 구분되어 있습니다.

각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼

문자열을 리턴하는 함수, solution을 완성하세요.
[제한조건]

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

=> 짝수번째는 대문자, 홀수번쨰는 소문자.

function solution(s){
    const answer =
    s.split(" ").map((valueArr) => {
        return valueArr.split("").map((value, index) => {
            return !(index % 2) ? value.toUpperCase() : value.toLowerCase();
        }).join("")
    }).join(" ");

    return answer;
}


[접근방식]

- toUpperCase()

- index

- % 나누기 연산자

[풀이]

 

 

[문제링크]
[다른사람풀이]


자릿수 더하기 [22번 문제]

[문제설명]

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
[제한조건]

N의 범위 : 100,000,000 이하의 자연수

=> 자릿수 만큼 있는 숫자 다 더하기

function solution(n) {
  let num = String(n).split('')
  let value = 0;
  for (let i = 0; i < num.length; ++i){
    value += parseInt(num[i])
    console.log(value)
  }
  return value
}


[접근방식]


[풀이]

 

 

[문제링크]
[다른사람풀이]


정수 내림차순으로 배치하기 [24번 문제]

[문제설명]

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
[제한조건]

n은 1이상 8000000000 이하인 자연수입니다.

function solution(n) {
  return parseInt(String(n).split('').sort((a,b) => b-a).map(el => parseInt(el)).join(''))
}


[접근방식]

- 함수로 다 가능할 것 같다.

- map에 대해 더 알아보자


[풀이]

1. 정수를 문자로 String

2. 문자를 쪼개고 split

3. 쪼갠걸 정렬함 sort

4. 쪼갠걸 숫자로 parseInt

5. 숫자를 합친다 join

6. 문자열 숫자로 parseInt

 

[문제링크]
[다른사람풀이]