반응형

알고리즘 97

[JS] 프로그래머스_ 방문길이

문제링크 코딩테스트 연습 - 방문 길이 programmers.co.kr 방향에 따른 이동 좌표를 direction이라는 변수에 키, 쌍 형태로 만들어준다. 방문된 이동 경로를 찾기위해 집합 자료형으로 visited를 만들어준다. (중복을 제거하기 위해 집합 사용) 현재 좌표를 now라고 하고, 0,0으로 세팅한다. 반복문으로 dirs에 따른 이동 좌표를 구한다.(dx,dy) 좌표 평면의 경계를 넘어가는 명령어는 무시하기 위해 5보다 크거나, -5보다 작은 4개의 조건에서는 for문을 건너뛴다. 이동 경로는 (0,1) -> (1,1) 로 간 경로와 (1,1) -> (0,1) 간 것을 같다고 치기 때문에, 이 두개의 경로를 모두 구해서 visited에 add 해준다. 이렇게 되면 동일 경로가 2개씩 들어가게..

알고리즘 2021.07.25

[JS] 프로그래머스_ 짝지어 제거하기

문제링크 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr stack 이라는 빈 배열을 만들어주고, stack 배열이 비어있지 않았다면, 배열의 마지막 요소와, 현재 요소가 같은지 비교한다. 같을 경우, stack 배열에 있던 요소를 빼주고, 같지 않다면 stack에 추가한다. stack이 비어있으면(처음 혹은, 앞의 같은 두 수가 제거되었을 경우) stack에 새 요소를 추가해준다. 최종적으로 배열에 아무것도 없으면 짝지어서 잘 빠져나간 것이므로 짝지어 제거하기가 성공 = 1 아니라면 0 출력 f..

알고리즘 2021.07.25

[JS] 프로그래머스_폰켓몬

문제링크 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 주어진 숫자 배열을 for문으로 검색해서, arr라는 빈 배열에 요소가 있는지 확인 후 없고, arr의 길이가 최대로 나올 수 있는 길이/2 보다 작은지 확인해서, 조건에 만족하면 arr에 push한다. arr에 동일 요소가 이미 있다면, 반복문 조건에 따라 arr 배열에 들어가지 않는다. 최종적으로 arr 배열의 길이를 구해준다. = 최대 종류의 수 function solution(nums) { const arr = []; for (let x of..

알고리즘 2021.07.25

[JS] 프로그래머스 팰린드롬 개수 구하기

문제 설명 앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어를 팰린드롬(palindrome)이라고 합니다. 예를들어서 racecar, 10201은 팰린드롬 입니다. 두 자연수 n, m이 매개변수로 주어질 때, n 이상 m 이하의 자연수 중 팰린드롬인 숫자의 개수를 return 하도록 solution 함수를 완성해 주세요. 제한사항 m은 500,000이하의 자연수이며, n은 m 이하의 자연수입니다. 입출력 예 입출력 예 설명 입출력 예 #1 1 이상 100 이하의 팰린드롬은 다음과 같이 18개가 있습니다. 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99 입출력 예 #2 100 이상 300 이하의 팰린드롬은 다음과 같이 20개가 있습니다. 1..

알고리즘 2021.07.25

[JS] 알고리즘 기초 정복 5-6번_학급 회장(해쉬)

문제 5-6번 학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다. 선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작 성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다. 🍄 입력설명 첫 줄에는 반 학생수 N(5

알고리즘 2021.07.20

[JS] 알고리즘 기초 정복 5-5번_최대 매출

문제 5-5번 현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출기록을 주고 연속 된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다. 만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면 12 15 11 20 25 10 20 19 13 15 연속된 3일간의 최대 매출액은 11+20+25=56만원입니다. 여러분이 현수를 도와주세요. 🍄 입력설명 첫 줄에 N(5

알고리즘 2021.07.20

[JS] 알고리즘 기초 정복 5-4번_연속 부분수열 2

문제 5-4번 N개의 수로 이루어진 수열이 주어집니다. 이 수열에서 연속부분수열의 합이 특정숫자 M이하가 되는 경우가 몇 번 있는지 구하는 프로그 램을 작성하세요. 만약 N=5, M=5이고 수열이 다음과 같다면 1 3 1 2 3 합이 5이하가 되는 연속부분수열은 {1}, {3}, {1}, {2}, {3}, {1, 3}, {3, 1}, {1, 2}, {2, 3}, {1, 3, 1}로 총 10가지입니다. 🍄 입력설명 첫째 줄에 N(1≤N≤100,000), M(1≤M≤100,000,000)이 주어진다. 수열의 원소값은 1,000을 넘지 않는 자연수이다. 🍄 출력설명 첫째 줄에 경우의 수를 출력한다 🍄 입력예제 1 5 5 1 3 1 2 3 🍄 출력예제 1 10 정답 코드

알고리즘 2021.07.20

[JS] 알고리즘 기초 정복 5-3번_연속 부분수열 1

문제 5-3번 N개의 수로 이루어진 수열이 주어집니다. 이 수열에서 연속부분수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하는 프로그램을 작성하세요. 만약 N=8, M=6이고 수열이 다음과 같다면 1 2 1 3 1 1 1 2 합이 6이 되는 연속부분수열은 {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}로 총 3가지입니다. 🍄 입력설명 첫째 줄에 N(1≤N≤100,000), M(1≤M≤100,000,000)이 주어진다. 수열의 원소값은 1,000을 넘지 않는 자연수이다. 🍄 출력설명 첫째 줄에 경우의 수를 출력한다. 🍄 입력예제 1 8 6 1 2 1 3 1 1 1 2 🍄 출력예제 1 3 정답 코드 투포인터 알고리즘 function solution(m, array) { let a..

알고리즘 2021.07.20

[JS] 알고리즘 기초 정복 5-2번_공통원소 구하기

문제 5-2번 A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로 그램을 작성하세요. 🍄 입력설명 첫 번째 줄에 집합 A의 크기 N(12로 정렬한다 arr1.sort((a, b) => a - b); arr2.sort((a, b) => a - b); let p1 = (p2 = 0); while (p1 < arr1.length && p2 < arr2.length) { if (arr1[p1] < arr2[p2]) p1++; else if (arr1[p1] === arr2[p2]) { answer.push(arr1[p1++]); p2++; } else p2++; } return answer; } let arr1 = [1, 3, 9, 5, 2]; let arr2 = [3,..

알고리즘 2021.07.19