전체 글

산본에서 개발하기
알고리즘 연습

[알고리즘 연습] 프로그래머스 거리두기 확인하기 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 대기실의 갯수와 한 대기실의 행과 열의 최댓값이 5로 크지 않았기 때문에 for문을 중첩해서 풀어도 시간초과가 나지 않는다. 대기실 배열을 순회하면서 해당 지점에 사람(P)이 있을 때, 8방향을 모두 탐색하며 거리두기를 확인한다. 상하좌우를 해당 지점부터 2칸을 확인하고 대각선 방향은 해당 지점부터 1칸을 확인한다. 대각선 방향의 경우 두 사람이 맨해튼 거리를 유지하고 있지 않다면 행 기준 더 위에 있는 사람의 아래에 파티션, 행 기준 더 아래에 있는 사람의 위에 파티션이 있는지 확인해야 한다. 이..

알고리즘 연습

[알고리즘 연습] 프로그래머스 k진수에서 소수 개수 구하기 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제를 풀어본 결과 패턴 파악만 끝나면 엄청 쉽게 풀 수 있는 문제였다. 자바스크립트의 경우 toString() 함수로 쉽게 n을 k진수로 변경할 수 있다. 변경 후 '0'을 기준으로 문자열을 스플릿해준다. 이 때 빈문자열은 제거해준다. 스플릿한 문자열을 순회하며 소수를 찾아서 발견하면 answer += 1을 해준다. 소스 코드 function solution(n, k) { let answer = 0; const arr = n.toString(k).split('0').filter(el => e..

알고리즘 연습

[알고리즘 연습] 프로그래머스 주차 요금 계산 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시간에 따른 전개와 문자열 조작 등으로 약간은 복잡할 수 있는 구현 문제였다. 그러나 차가 입차하고 출차하는 흐름 및 패턴만 파악하면 쉽게 풀 수 있었다. 우선, 차가 입차할 때는 입차한 시간을 저장하고 해당 차량이 나갔는지 파악할 수 있게 차량 번호를 저장하여 추적할 수 있게 한다. 차가 출차할 때는 입차 기록과 출차 기록을 통해 차량이 주차장에 있었던 시간을 구해주고 출차를 확인했기 때문에 추적도 제외시켜준다. 입출차 내역을 모두 순회했을 때 추적한 배열을 통해 23:59까지 출차하지 않은 차량..

알고리즘 연습

[알고리즘 연습] 프로그래머스 양궁대회 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 양궁게임에 몰입해서 게임에서 있을 수 있는 케이스를 파악 후 의식의 흐름대로 풀면 쉽게 풀 수 있는 문제였다. n의 최대값이 10으로 재귀를 통해 모든 경우의 수를 구해서 그 중 두 플레이어의 점수 차가 가장 큰 경우를 구하면 된다. 이 때 주의할 점은 2가지가 있었다. 라이언이 큰 점수 차이로 우승할 수 있는 방법이 여러 가지 일 경우, 가장 낮은 점수를 더 많이 맞힌 경우를 선택한다. 이 문제는 재귀를 수행할 때 낮은 점수부터 수행하면 해결된다. 화살의 개수가 남는 경우가 존재한다. 이 문제는 ..

알고리즘 연습

[알고리즘 연습] 프로그래머스 두 큐 합 같게 만들기 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제를 자바스크립트로 풀 때 2개의 Queue를 사용해 shift/push로 구현하면 몇 개의 테스트 케이스에서 시간 초과가 발생하기 때문에 1개의 Queue를 사용한다. 고려해야 할 사항은 크게 2가지가 있었다. Queue의 상태에 따라 어떤 Queue에서 원소를 추출해서 어떤 Queue에 추가할 것인가 두 Queue의 합계가 같을 수 없는 경우 언제 반복문을 멈출 것인가 첫 번째 사항은 합계가 큰 Queue에서 원소를 추출하여 합계가 작은 Queue에 추가하는 방식으로 구현한다. (그리디)..

알고리즘 연습

[알고리즘 연습] 프로그래머스 이모티콘 할인행사 (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..

산본개발자
SanbonDeveloper