TIL 알고리즘

신동윤·2023년 1월 27일

문제분석
문제를 정확히 이해합니다.
분석한 내용을 정리합니다.

규칙찾기
분석 내용을 바탕으로 규칙을 찾습니다.

코딩화
분석 내용을 바탕으로 알맞은 구현방법을 찾습니다.

코딩
실제로 코딩을 수행합니다.
통과하지 못한다면 문제가 있는 순서(1 ~ 3번중)로 다시 돌아가서 진행합니다.

2016

https://school.programmers.co.kr/learn/courses/30/lessons/12901#

function solution(a, b) {
    let day = ['FRI','SAT','SUN','MON','TUE','WED','THU'];   
    let month = [31,29,31,30,31,30,31,31,30,31,30,31];
    
    let count = -1 //0~ 365일
    
    for (let i=0; i < a-1; i++) {
        count += month[i];
        console.log(count);
    } 
    
    return day[(count+b)%7];
}

1월 1일은 fri, 2월은 29일까지.
1. 요일은 7일마다 반복된다.
2. 전체 날짜를 구하여 7로 나눈다면 요일을 알 수 있다.

나누어 떨어지는 숫자배열

https://school.programmers.co.kr/learn/courses/30/lessons/12910

function solution(arr, divisor) {
    let answer = [];
    let arrSort = arr.sort((a,b) => a - b);
    console.log(arrSort);
    
    for (let i=0; i<arr.length; i++) {
        if (arrSort[i] % divisor === 0) {
            answer.push(arrSort[i]);
        }  
    }   
    	if (answer.length === 0) {
        answer = [-1];
    }
    return answer;
}

arr는 자연수 배열
1. 오름차순으로 정렬
2. 반복문을 통해 나머지가 0인 것들만 push
-1을 담는방법 생각하기
2-1. 필터를 통해 조건에 맞는 배열 반환.
!필터는 -1을 뽑아낼 방법이 안나오던데?

수박수박수박수

https://school.programmers.co.kr/learn/courses/30/lessons/12922

function solution(n) {
    let word = "수박"
    let longword = word.repeat(n/2);
    
    return longword.slice(0 , n);
}
  1. 수박을 길게 반복해서 적는다.
  2. 긴 단어를 자른다.

완주하지 못한 선수

https://school.programmers.co.kr/learn/courses/30/lessons/42576
    let sortParticipant = participant.sort();
    let sortCompletion = completion.sort();
    let result = [];
    
    console.log(sortParticipant);
    console.log(sortCompletion);
    
    loop :
    for (let i=0; i<sortParticipant.length; i++) {
        if (sortParticipant[i] !== sortCompletion[i]) {
            return sortParticipant[i];
            break loop;
        }
    }
}
  1. 한명만 통과하지 못했기에 대부분의 목록이 같다.
  2. sort로 쉽게 두 목록을 비교한다.
  3. 반복문으로 두 목록을 비교하여 참가자목록에만 있는 값을 불러온다.

0개의 댓글