14주차 알고리즘

이동규·2023년 7월 26일

코테

목록 보기
5/22

function solution(answers) {
    const  a  = [1,2,3,4,5];
    const b = [2,1,2,3,2,4,2,5];
    const c = [3,3,1,1,2,2,4,4,5,5];
    
    let score_a = 0;
    let max_a = a.length;
    let a_cnt=0;
    
    let b_cnt=0;
    let score_b = 0;
    let max_b =b.length;
   
    let c_cnt=0;
    let score_c = 0;
    let max_c = c.length;

    answers.forEach((e,i)=>{
        
        if (e === a[i % max_a]) {
            ++a_cnt;
            //score_a %= max_a;
        }

        if (e===  b[i % max_b]){
           ++b_cnt;
           //score_b %= max_b;
          

        }
        if(e === c[i % max_c]){
            ++c_cnt;
            //score_c %= max_c;
            
        }
    });
  
    const maxAnswer = Math.max(a_cnt,b_cnt,c_cnt)
    let answer = [];
    
    if(a_cnt=== maxAnswer)
        answer.push(1)
    if(b_cnt === maxAnswer)
        answer.push(2)
    if(c_cnt === maxAnswer)
        answer.push(3)
    
    return answer
}
 class Solution {
    public List<Integer>solution(int[] answers) {
        
        int [] person1 =  {1,2,3,4,5};
        int person1_cnt = 0;
        int [] person2 = {2,1,2,3,2,,2,5};
        int person2_cnt = 0;
        int [] person3 = {3,3,1,1,2,2,4,4,5,5};
        int person3_cnt = 0;
        List<Integer>list = new ArrayList<>();
      
        for (int i = 0; i <answers.length; i++) {
            if (answers[i] == person1[i% person1.length]) {
                ++person1_cnt;
            }
            if(answers[i] == person2[i % person2.length]){
                ++person2_cnt;
            }

            if(answers[i] == person3[i % person3.length]){
                ++person3_cnt;
            }   
        }
        
        int frist=  Math.max(person1_cnt, person2_cnt);
        int result =  Math.max(frist,person3_cnt);
    
       if (result == person1_cnt) {
            list.add(1);
       }
       if (result == person2_cnt) {
            list.add(2);
       }
       if (result == person3_cnt) {
            list.add(3);
       }

        return  list;

    }
}

person1.length 여기서 틀림 person[i]가 length 길이 만큼 되면 인덱스가 0이 되게 만들어야 된다. 만약 length-1을 해주게 된다면 다음 인덱스가 1이 된다.

function solution(number, limit, power) {
    let  answer = 0;
    for (let n = 1; n <= number; n++)
    {
        let count = 0;
        for (let j = 1; j * j <= n; j++)// n의 제곱 근이 되는 순간까지 for문을 돈다.
        {
            if (j * j === n) count++;// n의 제곱 근이 되는 순간 count를 증가시킨다.
            else if (n % j === 0) count += 2; //나머지가 0일 때 2를 증가시킨다. n   
          
        }
        if (count > limit) count = power;// count가 
        answer += count;
    }
    return answer;
}

기존 메커니즘으로 약수의 개수를 구하면 O(n)의 시간복잡도를 가진다.

제곱근을 활용

만약 n이 1부터 10 이다. 그러면 j는 3까지 돈다. 1, 2, 5, 10 이다. j=1 , j=2 일 때 나머지가 0이 된다. 제곱근 이면 1개 증가 시켜준다.약수 계산하는 것이 좀 어려웠다. 제곱근을 통하여 약수를 구하면 O(log n)의 시간 복잡도가 된다.

0개의 댓글