프로그래머스 - 시소 짝꿍 (Map과 조합으로 중복 제거하기)
·
Learn/Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/152996# 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 이해시소에는 중심으로부터 2m, 3m, 4m 거리에 좌석이 있고, 두 사람이 탈 때 무게 × 거리가 양쪽 다 같으면 시소 짝꿍이다.예를 들어:180kg이 4m에 앉고, 360kg이 2m에 앉으면: 180 × 4 = 360 × 2 = 720 (짝꿍!)180kg이 3m에 앉고, 270kg이 2m에 앉으면: 180 × 3 = 270 × 2 = 540 (짝꿍!)주어진 몸무게 배열에서 시소 짝꿍이 몇 쌍인지 구하면 된다. 접근 방법1. 이중 for문 (O..
프로그래머스 - 마법의 엘리베이터 (구현 + 숫자 다루기)
·
Learn/Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 이해이 문제는 특정 층에서 0층으로 내려가는데 필요한 최소 버튼 횟수를 구하는 문제다. 핵심 조건:버튼: -1, +1, -10, +10, -100, +100 등 (10의 거듭제곱 형태)버튼 1번 = 마법의 돌 1개 소모목표: 최소한의 버튼으로 0층 도달예시 분석:16층 → 0층방법1: -1 6번 + -10 1번 = 7번방법2: +1 4번 + -10 2번 = 6번 ✅왜 방법2가 더 효율적일까? 16의 일의 자리가 6이니까, 20으로 올린 후 -10 ..
프로그래머스 - 오픈채팅방 (문제대로 구현하기)
·
Learn/Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 이해사용자의 입장, 퇴장, 닉네임 변경 기록이 주어질 때,모든 기록을 처리한 후 출력 메시지를 최종 닉네임 기준으로 구성해야 한다. 접근 방법userId와 nickname의 관계를 해시맵(userIdNameMap)에 저장record를 순회하며,입장(Enter)과 퇴장(Leave) 기록만 메시지로 남기기닉네임 정보가 있는 경우(Enter, Change)에만 해시맵을 갱신하기모든 기록을 처리한 뒤, 메시지에 저장된 userId를 최신 닉네임으로 변환 풀..
프로그래머스 - 두 큐 합 같게 만들기 (투포인터 눈치채기2)
·
Learn/Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 이해길이가 같은 두 개의 큐가 주어진다.한 번의 연산은 한 큐에서 pop 한 원소를 다른 큐에 insert 하는 것을 의미한다.이 연산을 최소 횟수로 수행하여 두 큐의 합을 같게 만들어야 한다.어떤 방법으로도 두 큐의 합을 같게 만들 수 없으면 -1을 반환한다. 접근 방법처음에는 단순히 모든 상태를 BFS로 탐색하는 방법이 떠오른다.하지만 큐의 길이가 최대 300,00이므로, BFS로 모든 상태를 탐색하는 것은 불가능!DP 역시 가능한 큐의 상태를..
프로그래머스 - 스킬트리 (문자열과 시뮬레이션)
·
Learn/Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/49993#fnref1 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 이해선행 스킬 순서가 주어질 때, 각 유저의 스킬트리가 순서를 어기지 않는지 판단하여 가능한 스킬트리 개수를 구한다.접근 방법스킬트리 순서를 어기지 않는지만 판단하면 된다. 따라서 각 스킬트리에서 선행 스킬만 추출한 뒤, 주어진 순서의 접두사(prefix)인지 확인한다.코드function solution(skill, skill_trees) { let answer = 0 for (const tree of skill_trees) ..
프로그래머스 - 연속된 부분 수열의 합 (투포인터 눈치채기)
·
Learn/Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 이해비내림차순(오름차순 또는 같음)으로 정렬된 수열이 주어진다.이때 합이 k가 되는 연속된 부분 수열을 찾아야 한다.부분 수열의 합이 k.가능한 부분 수열이 여러 개인 경우, 길이가 가장 짧은 수열을 선택.길이까지 같다면 시작 인덱스가 가장 작은 수열을 선택. 접근 방법단순하게 생각하면, 이중 for문으로 모든 구간을 탐색하면 된다.하지만 이 방식의 시간 복잡도는 O(n²)인데, n이 최대 1,000,000까지 가능하므로 시간 초과가 발생한다. 문..