WHAT I LEARNED/Algorithm 20

[javascript] 백준 11729번 하노이 탑 이동 순서

📝 문제 https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net ✍🏻 풀이 옛날에 재밌게 했던 컵에 있는 물 옮겨담는 게임같은 느낌! 예제와 출력을 통해 어떤 것을 구해야하는지 파악부터 했다. 3 입력값 3은 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)을 의미한다. 이걸 세번째 장대에 옮기는 횟수와 옮긴 과정(장대 번호, 옮긴 원판 번호) 을 출력하면 된다. 7 1 3 1 2 3 2 1 3 2 1 2 3 1 3 ..

[javascript] 백준 9184번 신나는 함수 실행

🧮 문제 https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 지 혼자만 냅다 신나버린 9184번 문제..🙂🔥 9184번은 *메모이제이션(Memoization)을 이용해 푸는 전형적인 동적계획법(DP, Dynamic Programing) 문제라고 한다. * 동일한 문제를 반복해야 할 경우, 한 번 계산된 결과를 저장해 두었다가 활용하는 방식으로 중복 계산을 줄이는 것 ✍🏻 풀이 입력값 1 1 1 2 2 2 10 4 6 50 50 50 -1 7 18 -1..

[javascript] 백준 1003번 피보나치 함수

문제 https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 당황스러운 문제 ^^! 보자마자 코드블럭은 뒤로하고 밑의 줄글을 차근차근 읽어보기로 했다. 이제 슬슬 익숙해지는 백준의 입출력값들. 첫번째 입력값은 테스트 케이스의 총 개수, 그리고 그 개수만큼의 각 테스트 케이스들! ✍🏻 풀이 더보기 첫번째 예제의 입력값 3 // 테스트 케이스의 개수 (T) 0 1 3 입력값의 첫번째가 3이므로 총 3개의 테스트 케이스들이 따라오는 것. 예제 2번도 마찬가지! // '0이 출력되는 개수' '1이 출력되는 개수' 1 0 0 1 1 2 💡 코드 const ..

[javascript] 백준 11050번 이항 계수 1

https://www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 문제 👀 풀이 정수론 및 조합론 문제인 이항 계수 1. 이항계수는 말 그대로 '두 개의 항(이항)을 전개하여 계수로 나타낸 것'이다. 쉽게 말하면, (a + b)^n 을 전개하였을 때의 계수를 의미한다는 것. 이러한 이항계수를 구하는 방법은 다음과 같다. 우리 문제와 조건이 같은 첫번째의 n!/(k!*(n-k)!)를 사용하면 되겠다! 단 주의할점이 있는데 nCk에서 k가 0일때는 1을 반환하므로 k가 0이나 1일때 1을 반환하도록 해주어야한다. 예제를 들어 설명을 하자면,..

[javascript] 백준 9012번 괄호

뭔가 괄호가 우다다다 쏟아져서 살짝 혼미했지만 잘 읽어보니 문제자체는 이해하기가 쉬웠다. 괄호가 여는 괄호[`(`]와 닫는 괄호[`)`]가 짝에 맞게 구성되어있으면 즉, `( )`형태이면 VPS가 되는 것. 짝이 맞는 VPS안에 VPS가 있으면 그것도 VPS가 된다는 말! 문제를 통해 `(`와 `)`의 개수가 동일하면 VPS가 되는 것은 쉽게 알 수 있었지만, 이 문제의 주제인 스택으로 구현하는 방법이 고민되었다. 💡답안 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split('\n'); const Cnt = Number(input[0]); // T // i번째 줄의 괄호들 정리 //0번째는 T이므로(=Cnt) ..

[javaScript] 백준 10773번 제로

스택 문제인 10773번. 그래서 스택이 무엇인가에 대해 먼저 알아보았다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조을 말한다. 스택의 의미를 알고나니 빈 배열을 두고 그 안에 값을 넣고 빼는 과정을 필요함을 확신할 수 있었다. (머리를 스쳐지나가는 push, pop..) 문제만으로는 이해가 어려워서 예제2와 힌트를 참고해 문제를 이해했다. 예제의 2의 입력 10 1 3 5 4 0 0 7 0 0 6 먼저 K는 10이므로 총 10줄이 생성되고, 그 후 각 줄에 정수 1개씩 배정된다. 이 때 0이 나오면 가장 최근의 수를 삭제한다. 위 과정을 거쳐서 예제2의 출력값은 2가 된다. K가 주어지고 어떻게 숫자가 구성되는지를 확인. https://developer.mozilla.org/ko/do..

[javascript] 백준 1110 더하기 사이클

규칙을 살펴보기 전, 숫자를 10으로 나누면 몫은 앞자리가, 나머지는 뒷자리가 되는 것을 한 번 더 떠올리고 들어가면 좋다! 26 / 10 = 몫: 2 / 나머지: 6 문제의 예시를 한 번 더 살펴보면, 26 → 2 + 6 = 8 → 68 입력값이 26인 경우, 2+6 = 8. 다음 수는 6이 10의 자리가 되고 8이 1의 자리가 되어서 68이 된다. 같은 과정을 반복하면 6+8 = 14. 다음 수는 8이 10의 자리가 되고 14의 오른쪽 수인 4가 1의 자리가 되어서 84가 된다. 여기서 입력값의 1의 자리는 다음 수의 10의 자리가 된다는 것, 각 자릿수의 합의 오른쪽 숫자가 1의 자리가 된다는 것이 포인트. 그럼 우리에게 필요한 과정은 1️⃣ 입력값의 10의 자리와 1의 자리를 뽑고, 2️⃣ 그걸 ..

[프로그래머스 / 자바스크립트] 폰켓몬

오늘의 문제는 폰켓몬! 제목은 너무나도 귀엽지만 문제 글자수는 썩 귀엽지않은 문제다ㅎㅎ.. 제일 다양한 포켓몬을 고를 수 있는 방법을 찾고 그에 해당하는 포켓몬 종류 번호의 개수를 리턴하는 문제. 입출력 예를 보니, ✔️일단 result의 최댓값은 nums.length / 2 ✔️중복된 숫자 제거 먼저 진행해야 하나? ✔️그래서 result의 최댓값이 num.length / 2보다 크거나 작을 때로 구분해야하나? 이런 생각들이 들었다. 일단 배열 내 중복부터 제거하기로! 배열 내 중복 제거 방법은 여러가지가 있지만, 내가 선택한 방법은 Set! 먼저 new Set(nums)로 중복값이 있는 배열을 Set객체로 만들어서 중복을 제거하고, [...set]로 Set객체를 다시 배열로 변환하였다. 전개연산자라고..

[프로그래머스 / 자바스크립트] K번째수

문제만 읽었을 때 파악해본 것은 ✔️array의 i ~ j번째는 배열 내에서 i-1번째 ~ j-1번째 ✔️배열 자르기는 slice? ✔️그럼 slice를 쓰고 sort로 정렬 한 번 시킨 후 배열 내의 k-1번째 값 리턴하기 이 정도였다. 문제 자체는 파악하기가 쉬웠다. 문제는 commands값이 2차원 배열로 되어있어 리턴할 내용이 여러개라는 것.. 🤯 (= 내가 잘 못하는 것들 중 하나) 행렬의 덧셈부터 2차원 배열에 치여버린 나는 이거 보고 한숨 푹..for중첩문을 돌려야할까? 일단 간단하게 생각해서 돌려봤는데 commands[0]의 결과값이 도출되긴 했다. 그런데 문제는 1️⃣ return이 for문 바깥으로 나오면 값 도출이 어렵다는 것과 2️⃣ +=로 붙여주어도 commands[i]의 값들이 ..