알고리즘 연습

알고리즘 연습

[알고리즘 연습] 프로그래머스 이모티콘 할인행사 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 문제를 읽고 바로 중복 순열을 떠올렸다면 엄청 간단하게 풀 수 있는 문제였다. 이모티콘의 할인된 금액을 구해야 하고 서로 다른 이모티콘이 동일한 할인률을 가질 수 있기 때문에 할인률에 대한 중복 순열을 구해준다. (이모티콘이 최대 7개라서 시간 초과가 발생하지 않는다.) 중복 순열 각 케이스와 유저 배열을 순회하면 각 케이스에 대한 이모티콘 플러스 서비스 가입자 수와 이모티콘 판매액을 구한다. 순회하며 구한 정답 배열을 가입자 수를 기준으로 내림차순하며, 가입자 수가 동일한 경우 판매액을 기준으로 ..

알고리즘 연습

[알고리즘 연습] 프로그래머스 택배 배달과 수거하기 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 인터넷에 우선순위 큐, 그리디 등 다양한 알고리즘 문제라고 소개되어 있지만 내가 스스로 풀어본 결과 약간의 센스가 필요한 단순한 구현 문제 같았다. 해당 문제를 풀 때 주의해야 할 점은 2가지가 있었다. 코드 초반에 deliveries 배열과 pickups 배열을 뒤에서부터 순회하면서 두 배열의 초기값이 모두 0인 경우 n을 줄여줘야 한다. (테스트 2) 시간 초과가 나지 않게 deliveries 배열과 pickups 배열의 맨 뒤 인덱스 값이 0이 될 경우 바로 pop 해준다. (테스트 16) 전..

알고리즘 연습

[알고리즘 연습] 프로그래머스 덧칠하기 (LEVEL 1, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 section 배열이 오름차순으로 정렬되어 있기 때문에 현재 위치로부터 칠할 수 있는 범위('limit')를 설정한다. section 배열을 순회하면서 값이 limit을 벗어날 때마다 값을 다시 계산한다. 무조건 한번은 칠해야 하기 때문에 answer + 1을 해준다. 소스 코드 function solution(n, m, section) { let answer = 0; let limit = section[0] + m - 1; for (const position of section) { if (pos..

알고리즘 연습

[알고리즘 연습] 프로그래머스 바탕화면 정리 (LEVEL 1, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시작점은 최솟값을 찾아야 하기 때문에 50, 끝점은 최댓값을 찾아야 하기 때문에 0으로 설정한다. 배탕화면 배열에 대해 2중 for문을 돌면서 파일이 존재하는 경우('#') 각 좌표의 값을 확인 후 업데이트 해준다. 끝점의 경우 문제에서 제시한대로 +1 해준다. 소스 코드 function solution(wallpaper) { const H = wallpaper.length; const W = wallpaper[0].length; const answer = [50, 50, 0, 0]; for (le..

알고리즘 연습

[알고리즘 연습] 백준 2636 (치즈, 자바스크립트)

문제 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 풀이 판의 가장자리('X')에는 치즈가 놓여져있지 않기 때문에 모든 BFS의 시작점을 (0, 0)으로 지정한다. 매 BFS 수행시 바깥 부분('공기')와 접촉되어 있는 모든 치즈를 찾아 판에서 제거한다. 판에 치즈가 모두 녹아 없어질 때까지 BFS를 수행하며 시간('time')을 증가시킨다. 제거할 치즈가 존재할 경우 제거되는 치즈의 개수('cnt')를 업데이트 해준다. 소스 코드 class Queue { constructor() { this.data = []; t..

알고리즘 연습

[알고리즘 연습] 프로그래머스 공원 산책 (LEVEL 1, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 주어진 배열에서 시작 위치('S')를 찾아서 초기 위치로 설정한다. 주어진 명령을 모두 수행하면서 범위를 벗어나거나 장애물을 만나는지를 확인한다. 위의 두 경우에 해당하지 않을 때 현재 위치를 이동한 위치로 변경해준다. 소스 코드 function solution(park, routes) { const H = park.length; const W = park[0].length; const dirs = { N: [-1, 0], S: [1, 0], W: [0, -1], E: [0, 1], }; let x..

알고리즘 연습

[알고리즘 연습] 백준 2661 (좋은수열, 자바스크립트)

문제 2661번: 좋은수열 첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다. www.acmicpc.net 풀이 N의 최대 길이가 80, 그러나 최소값만 구하면 되기 때문에 백트래킹으로 구현했다. 내부 for문이 1부터 시작하기 때문에 처음 목표 길이에 도달한 값이 최소값이다. 이를 구현하기 위해 flag 변수를 사용했다. 새로운 문자가 만들어질 때마다 좋은수열인지 확인하고 나쁜수열일 경우 다음으로 넘어가지 않는다. str값을 계속 문자열로 유지해야 하는데 처음에는 중간에 숫자로 변경되어 Number의 범위가 초과돼 문제를 틀렸다. 소스 코드 const filePath = ..

알고리즘 연습

[알고리즘 연습] 백준 1062 (가르침, 자바스크립트)

문제 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 풀이 남극의 모든 단어는 a, c, i, n, t를 포함하고 있어 이 5개의 글자는 반드시 배워야 한다. 따라서 K가 5이하 라면 배울 수 있는 단어는 존재하지 않는다. visited 배열을 통해 현재까지 배운 글자를 체크한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFileSync..

알고리즘 연습

[알고리즘 연습] 백준 2580(스도쿠, 자바스크립트)

문제 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const board = Array.from({ length: 9 }, () => Array(9)); for (let i = 0; i < 9; i++) { ..

알고리즘 연습

[알고리즘 연습] 백준 9663 (N-Queen, 자바스크립트)

문제 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 행(idx)를 증가시키며 dfs를 수행한다. 각 행에서는 모든 열(내부 for문)에 대해서 퀸을 놓아본다. 특정 행에서 퀸을 놓을 수 있는 경우가 존재하지 않는 경우 다음 행으로 넘어가지 않고 재귀를 종료한다. 마지막 행까지 도달했다는 것은 모든 행에 퀸을 놓을 수 있다는 것을 의마하기 때문에 answer을 1 증가시킨다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt..

산본개발자
'알고리즘 연습' 카테고리의 글 목록 (2 Page)