[프로그래머스 자바스크립트] 코딩테스트 입문 Day 9,10 풀어보기

2024. 2. 14. 23:59·Algorithm/Programmers(JavaScript)

Day 9

개미 군단

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

function solution(hp) {
    // 장군개미 = 5, 병정개미 = 3, 일개미 = 1
    
    // hp가 0이라면
    if(hp === 0) {
        return 0;
    }
    
    // hp가 1이거나 3이라면
    if(hp === 1 || hp === 3) {
        return 1;
    }
    
    // hp가 2이거나 4라면
    if(hp === 2 || hp === 4) {
        return 2;
    }
    
    // hp가 5 이상이라면
    if(hp >= 5) {
        
        // hp를 5로 나눈 몫
        let quotient = parseInt(hp / 5);
        
        // hp를 5로 나눈 나머지
        let remainder = hp % 5;
        
        // 나머지가 0이라면 몫을 return
        if(remainder === 0) {
            return quotient;
        }
        
        // 나머지가 1 혹은 3이라면
        else if(remainder === 1 || remainder === 3) {
            return quotient + 1;
        }
        
        // 나머지가 2 혹은 4라면
        else {
            return quotient + 2;
        }   
    }
}

 

밑의 코드처럼 간결하게 풀 수도 있다.

function solution(hp) {
    return Math.floor(hp/5)+Math.floor((hp%5)/3)+(hp%5)%3;
}

모스부호(1)

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

function solution(letter) {
    let morse = {a: ".-",
                 b:"-...",
                 c:"-.-.",
                 d:"-..",
                 e:".",
                 f:"..-.",
                 g:"--.",
                 h:"....",
                 i:"..",
                 j:".---",
                 k:"-.-",
                 l:".-..",
                 m:"--",
                 n:"-.",
                 o:"---",
                 p:".--.",
                 q:"--.-",
                 r:".-.",
                 s:"...",
                 t:"-",
                 u:"..-",
                 v:"...-",
                 w:".--",
                 x:"-..-",
                 y:"-.--",
                 z:"--.."}
    
    // 공백을 기준으로 나눠서 arr 배열에 저장
    let arr = letter.split(' ');
    
    // answer 문자열 생성
    let answer = '';
    
    // arr[i]와 일치하는 morse 배열의 value가 있는지 확인하고
    // 그 value의 key 값을 answer 문자열에 더해준다.
    for(let i = 0; i < arr.length; i++) {
        answer += Object.keys(morse).find(key => morse[key] === arr[i]);
    }
    
    return answer;
}

 

 

다른 사람이 푼 간결한 풀이

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}

function solution(letter) {
    return letter.split(' ').reduce((prev, curr) => prev + morse[curr], '')
}
  1. function solution(letter) : **solution**이라는 이름의 함수를 정의하며, 매개변수 **letter**를 받습니다.
  2. letter.split(' ') : 문자열 **letter**를 공백을 기준으로 나눕니다. 이렇게 나눠진 부분은 배열의 요소가 됩니다. 예를 들어, "HELLO WORLD"라는 문자열이 입력되면 배열은 **['HELLO', 'WORLD']**가 됩니다.
  3. .reduce((prev, curr) => prev + morse[curr], '') : 배열을 reduce 메소드를 사용하여 하나의 값으로 축소합니다. **prev**는 누적된 값, **curr**은 현재 배열의 요소입니다.
    • morse[curr] : morse 객체에서 현재 알파벳(curr)에 해당하는 Morse 코드 값을 가져옵니다. **curr**은 배열의 각 요소인 단어(예: 'HELLO')입니다.
    • prev + morse[curr] : 이전까지 누적된 값(prev)에 현재 알파벳(curr)에 대응하는 Morse 코드를 더합니다.
  4. 최종적으로 reduce 메소드가 끝난 후, Morse 코드로 변환된 문자열이 반환됩니다.

가위바위보

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

function solution(rsp) {
    // 가위 = 2, 바위 = 0, 보 = 5
    
    let answer = '';
    
    for(let i = 0; i < rsp.length; i++) {
        
        // 바위일 때
        if(rsp[i] === '0'){
            answer += '5';
        }
        
        // 가위일 때
        else if(rsp[i] === '2'){
            answer += '0';
        }
        
        // 보일 때
        else if(rsp[i] === '5'){
            answer += '2';
        }
        
        
    }
    
    return answer;
}

 

 

아래와 같이 map과 join을 이용하면 간결하게 풀 수 있다.

function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
    var answer = [...rsp].map(v => arr[v]).join("");
    return answer;
}

 

구슬을 나누는 경우의 수

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

function factorial(n) {
    if (n <= 1) {
        return 1;
    }
    
    let result = 1;
    
    for(let i = 1; i <= n; i++) {
        result *= i;
    }
    
    return result;
}

function solution(balls, share) {
    // balls: 머쓱이가 갖고 있는 구슬의 개수
    // share: 친구들에게 나누어줄 구술 개수
    
     if (balls < share) {
        return 0;
    }

    
    return Math.round(factorial(balls) / ( factorial(balls-share) * factorial(share)) );
}

주의: Math.round를 쓰지 않으면 틀린다!! Math.round는 반올림을 한 정수를 반환한다.


Day 10

점의 위치 구하기

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

function solution(dot) {
    
    
    const x = dot[0] > 0 ? 1 : -1;
    const y = dot[1] > 0 ? 1 : -1;
    
    if(x === 1 ){
        if(y === 1) {
            return 1;
        }
        else {
            return 4;
        }
    }
    else {
        if(y === 1) {
            return 2;
        }
        else {
            return 3;
        }
    }
}

한번 삼항연산자를 써봤다.


2차원으로 만들기

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

function solution(num_list, n) {
    let answer = [];
    
    for(let i = 0; i< num_list.length;) {
        let arr = [];
        
        
        // arr에 n의 크기만큼 배열값을 넣어준다.
        for(let j = 0; j < n; j++) {
            arr[j] = num_list[i];
            i++;
        }
        
        // answer 배열에 arr 배열을 push한다.
        answer.push(arr);
    }
    
    return answer;
}

 

splice를 해결해서 풀 수도 있다.

function solution(num_list, n) {
    // num_list: 입력으로 주어진 배열
    // n: 묶을 원소의 개수

    var answer = [];  // 결과를 담을 2차원 배열

    while(num_list.length) {
        // num_list 배열이 비어있을 때까지 반복
        // splice(0, n): 배열의 첫 번째 원소부터 n개의 원소를 추출하여 반환하고 원본 배열에서 삭제
        // 추출한 원소들을 answer 배열에 추가
        answer.push(num_list.splice(0, n));
    }

    return answer;  // 묶어진 배열을 반환

공 던지기

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

생각을 조금 해봐야 했던 문제이다.

function solution(numbers, k) {
    // now = 배열을 무한히 옆으로 늘려놨을 때, 몇번째 인덱스에 있는지 
    let now = 2 * (k-1);
    
    // numbers[now를 배열의 길이로 나눈 나머지]가 정답
    return numbers[now % numbers.length];
}

배열 회전시키기

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

function solution(numbers, direction) {
    let answer = [];
    
    if(direction === "left") {
        let idx = 0;
        
        // numbers의 두번째 값부터 answer에 넣어준다.
        for(let i = 1; i < numbers.length; i++){
            answer[idx++] = numbers[i];
        }
        
        // 마지막으로 numbers 맨 처음 값을 answer에 넣어준다. 
        answer[idx] = numbers[0];
        
    }
    else if(direction === "right") {
        let idx2 = 0;
        
        // 맨 처음으로 numbers 맨 마지막 값을 answer에 넣어준다.
        answer[idx2++] = numbers[numbers.length -1];
        
        
        // numbers의 두번째 값부터 answer에 넣어준다.
        for(let i = 0; i < numbers.length - 1; i++) {
            answer[idx2++] = numbers[i];
        }
        
        
    }
    
    return answer;
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Programmers(JavaScript)' 카테고리의 다른 글

[프로그래머스 자바스크립트] '완주하지 못한 선수' 풀어보기  (0) 2024.07.17
[프로그래머스 자바스크립트] '폰켓몬' 풀어보기  (2) 2024.07.16
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 8 풀어보기  (0) 2024.02.13
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 6,7 풀어보기  (2) 2024.02.13
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 4,5 풀어보기  (2) 2024.02.10
'Algorithm/Programmers(JavaScript)' 카테고리의 다른 글
  • [프로그래머스 자바스크립트] '완주하지 못한 선수' 풀어보기
  • [프로그래머스 자바스크립트] '폰켓몬' 풀어보기
  • [프로그래머스 자바스크립트] 코딩테스트 입문 Day 8 풀어보기
  • [프로그래머스 자바스크립트] 코딩테스트 입문 Day 6,7 풀어보기
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (178)
      • Frontend (31)
      • Fedify (4)
      • Study (42)
        • NestJS (2)
        • Node.js (3)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (21)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (10)
        • crohasang_page (3)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    next.js
    fedify
    프론트엔드
    오블완
    프로그래머스
    프로그래머스 자바스크립트
    음악추천
    typescript
    react
    javascript
    KUIT
    백준
    자바스크립트
    티스토리챌린지
    알고리즘
    타입스크립트
    리액트
    HTML
    인공지능
    시스템프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 9,10 풀어보기
상단으로

티스토리툴바