본문 바로가기
Record/TIL

TIL 20230317(온보딩 10일차)

by junhub 2023. 3. 17.

function solution(array, height) {
    var answer = [];
    for(i = 0; i < array.length; i++){
        if(array[i] > height){
            answer.push(array[i])
        }
    }
    return answer.length;
}


console.log(solution([149,180,192,170],167))
console.log(solution([180,120,140],190))

array 에서 height 보다 큰 수의 숫자를 리턴하면 된다. 

 

for 반복문의 조건을 array의 배열 길이만큼 돌게 한 다음, 조건을 달아 만약 array의 i 번째 인덱스가 height보다 크다면 빈 배열을 할당한 answer에 push 메소드를 활용하여 array의 i 번째 인덱스를 넣을 것이라고 코드를 구성했다. 

이때 만약 return을 answer을 한다면 배열이 나오고 우리가 구하려는 키 큰 사람의 수를 구하지 못하기 때문에 length 메소드를 활용하여 리턴을 했다. 

 

function solution(array, height) {
    var answer = array.filter(a => a > height);
    return answer.length;
}

filter 함수를 사용해서 코드를 구성할 수 있는데 height 보다 큰 요소를 콜백함수를 이용해 리턴하여 answer에 할당했다. 


function solution(numbers) {
    var answer = numbers.map((a)=>a*2)
    return answer;
}

console.log(solution([1,2,3,4,5]))
console.log(solution([1,2,100,-99,1,2,3]))

map 함수를 사용했다. 배열의 요소를 반복적으로 하나씩 꺼내어 각각 * 2를 해준 다음 새로운 배열을 만들어 리턴해서 answer에 할당했다

 

function solution(numbers){
    let answer = []
    for(i = 0; i < numbers.length; i++){
        answer.push(numbers[i] * 2)
    }
    return answer
}

반복문과 push 함수를 사용해서 이와 같이 코드를 쓸 수도 있다. 


function solution(sides) {
    let down = sides.sort((a,b) => b-a)
    
    let max = down[0]
    if(max < down[1]+down[2]){
        return 1
    }else{
        return 2
    }
}


console.log(solution([199,72,222]))

가장 긴 변의 길이는 다른 두변의 길이의 합보다 작아야 한다. 

변수 down 에 배열로 받은 sides 를 sort 함수를 이용해 내림차순을 만들어 할당한다. 이렇게 되면 0번째 인덱스에 있는 요소가 가장 큰 값이 되므로 변수 max 에 down[0]을 할당한다. 

조건문을 사용해 만약 max 가 down 의 1번째 인덱스 요소와 2번째 인덱스 요소의 합보다 작으면 1을 리턴하고, 그게 아니라면 2를 리턴하게 한다. 

여기서 1번째 인덱스와 2번째 인덱스를 더하는 이유는 삼각형이 조건으로 달린 문제이기 때문에 배열의 인덱스는 0, 1, 2만 존재하고 내림차순으로 정렬했기 때문에 자동적으로 0번째 인덱스 요소가 가장 긴 변이 된다. 따라서 남은 1, 2번째 인덱스 요소를 더하여 비교하면 해결 가능하다. 


function solution(array){
    let upsort = array.sort((a,b) => a - b)
    let center = Math.floor(upsort.length / 2)
    let result = array[center]
    return result
}

console.log(solution([1,2,7,10,11]))

먼저 변수 upsort에 매개변수로 받은 array를 오름차순으로 정렬하여 할당한다. 그 후 변수 center 에 upsort 배열의 길이를 2로 나누고 Math.floor 함수를 이용한다. [1,2,7,10,11] 을 예시로 들면 Math.floor(5/2) 이므로 center은 2가 된다. 

변수 result에 매개변수로 받은 배열 array[center]를 할당하면 배열의 중앙값이 할당된다. 

function solution(array) {
  return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}

이와 같이 간결하게 쓸 수도 있다. 


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

console.log(solution([10]))
console.log(solution([15]))

n 이하의 홀수가 오름차순으로 담긴 배열을 리턴해야한다. for문을 이용해 0부터 n 만큼 반복하게 하고 내부에 조건문을 사용해 i % 2 !==0 즉, i를 2로 나눴을 때 나머지가 0이 아니라면 => 홀수라면 빈 배열이 할당된 변수 answer에 push 함수를 이용해 i를 넣는다. 

반복문이 끝나고 최종적으로 answer 를 리턴한다


function solution(s1, s2) {
    let answer = 0;
    let object1 = {}
    let object2 = {}
    for(let item of s1) {
        object1[item] = (object1[item] || 0) + 1;
    }
    for(let item of s2) {
        object2[item] = (object2[item] || 0) + 1;
    }
    
    for(let key in object1) {
        if(key in object2) {
            answer += 1;
        }
    }
    return answer;
  }
console.log(solution(['a','b','c'],['com','b','d','p','c']))
console.log(solution(['n','omg'],['m','dot']))

이중반복문을 사용하면 실행 시간이 오래 걸려서 통과가 안된다. 따라서 위와 같은 방법을 사용해서 반복 횟수를 줄였다. 

변수 object1, object2에 빈 객체를 할당한다. for of 반복문을 사용해 배열로 받은 s1과 s2를 각각 item에 넘기고 

for(let item of s1) {
        object1[item] = (object1[item] || 0) + 1;
    }

이 코드를 통해 object로 key : value 값을 전달한다. 

object1['a'] =                    --->              { 'a'  :    }     을 의미한다 

(object1['a'] ||  0)             --->             object1 이라는 객체 내에 a 라는 밸류 값이 없으므로 논리연산자에 의해 0이 된다.

 

그 후 괄호 밖에 있는 + 1 에 의해 {'a' : 1} 이 변수 object1 내로 들어가게 된다. 

 

위 반복문이 끝났을 때 console로 object1을 찍어보면 { ' a ' : 1, ' b ' : 1, ' c ' : 1 } 과 같이 찍히게 된다.

  

 for(let key in object1) {
        if(key in object2) {
            answer += 1;
        }

위의 두개의 반복문이 끝난 후 이 반복문이 실행된다. key에 object1 값을 넘겨주는 것인데 이때 key 가 받는 값은 

 { ' a ' : 1, ' b ' : 1, ' c ' : 1 } 이 아닌 a, b, c 이다. 그 후 if 조건문 내의 조건에 object2에 있는 요소와 key에 있는 요소가 같을 때마다 answer 에 ++ 을 해주게 되면 중복되는 요소의 개수를 구할 수 있다. 

 

function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}

이러한 코드로도 작성 할 수 있는데 filter 함수와 includes 함수를 이용해 겹치는 요소를 intersection에 리턴한 후 배열의 길이를 구하는 방법이다. 

'Record > TIL' 카테고리의 다른 글

TIL 20230406 알고리즘 문제풀이  (0) 2023.04.07
TIL 20230318(온보딩 11일차)  (0) 2023.03.18
TIL 20230315(온보딩 8일차)  (0) 2023.03.16
TIL 20230313(온보딩 6일차)  (0) 2023.03.15
TIL 2023.03.10(온보딩 5일차)  (0) 2023.03.11

댓글