본문 바로가기

CS/알고리즘&문제풀이

(21)
[백준] 랜선 자르기 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 발상에 도움이 된 영상: https://www.youtube.com/watch?v=94RC-DsGMLo 문제 설명 기존에 있던 랜선 K개를 동일한 양의 정수 길이 L 단위로 잘라 N개 이상의 동일한 랜선을 얻을 때, L의 최대값을 구하는 문제다. 일단 L의 후보 L'을 찾으면 ∑ ( Ki // L' ) >= N인지 판단할 수 있는데, 해당 조건을 만족하는 경우 L'을 ..
[백준] 계단 오르기 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 최근에 동적 계획법 문제를 접했는데 개인적으로 너무 어렵다고 느꼈다. 다만 계속 삽질하면서 얻은 경험적 지식 중 하나는 특정 동적 계획법 문제들은 뒤에서 앞 방향으로 식을 반대로 생각하면 쉬울 수 있다는 것이다. 현재 문제는 이러한 경우 중 하나로, 도착지 입장에서 점화식을 전개하는 방식으로 식을 작성했다. N번째 계단에 도달할 수 있는 경우는 크게 2가지가 존재할 수 있다. N-1번째 계단을 밟는 경우 N-..
[프로그래머스] 조이스틱 https://school.programmers.co.kr/learn/courses/30/lessons/42860 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 조이스틱은 가로 또는 세로로 움직일 수 있다. 이때 가로 방향이나 세로 방향이나 회전하는 것처럼 움직인다. 세로: 알파벳을 A-Z 사이에서 움직일 수 있다. 가로: 각 자리를 이동할 수 있다. 알파벳 이름의 각 자리는 맨 처음에 A로 시작한다고 가정하며, 주어진 이름을 완성하는데 걸리는 최소 조작 회수를 구한다. 세로 방향 세로 방향의 알파벳 이동은 나타내는게 별로 어렵지 않았다. 세로에서 수행할..
[프로그래머스] 숫자짝꿍 https://school.programmers.co.kr/learn/courses/30/lessons/131128 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 각 숫자 문자열을 받아 만들 수 있는 가장 큰 숫자를 문자열로 반환하는 문제다. 처음에는 각 문자열을 나누어 정렬한 후 서로 같은 문자를 비교하는 방식으로 문제를 해결했다. function solution(X, Y) { const xsp = X.split('').map(it => Number(it)).sort((a,b) => b-a); const ysp = Y.split('').map(it =>..
[프로그래머스] 이진수 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/120885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 많은 언어들이 N진수 문자열 10진수 숫자 변환 기능을 지원하므로 문제를 푸는 것 자체는 어렵지 않다. 예를 들어 자바스크립트에서 지원하는 기능을 이용하면 다음과 같이 풀 수 있다. function solution(bin1, bin2) { return (parseInt(bin1,2) + parseInt(bin2,2)).toString(2); } 다만 위 코드는 딱히 로직이랄게 없으므로, 이진수를..
[프로그래머스] 당구 연습 https://school.programmers.co.kr/learn/courses/30/lessons/169198 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 원쿠션으로 주어진 공을 맞출 때, 공이 이동하는 최소값을 찾는 문제이다. 문제 설명 중 입사각 및 반사각이 동일하다는 정보가 있는데, 이 정보를 가지고 각도를 어떻게 구해보겠다고 하면 문제가 산으로 가기 쉽다. 우선 문제를 생각하기 전에, 입사각과 반사각에 대해 다시 떠올려보자. https://terms.naver.com/entry.naver?docId=2039087&cid=47308&categ..
[프로그래머스] 베스트 앨범 https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해시 테이블을 사용하는 문제다. 자바스크립트에는 이에 대응되는 Map이 있으므로, 이를 이용하여 문제를 풀었다. function solution(genres, plays) { const map = new Map(); genres.forEach((gen, idx) => { const target = map.get(gen); if (!target) { // 해당 장르에 대한 초기 세팅. map.set..
[python] 파이썬 re 모듈 동작 방식 문제 상황 https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 조건에서 접두사가 매칭되는 경우를 찾으면 false을 반환하라고 한다. 맨 처음 작성한 코드에서는 "접두사"라는 표현에 집중하여 re 모듈을 이용하여 정규표현식 비교 코드를 작성했다. import re def solution(phone_book): phone_book.sort() for i in range(0, len(phone_book) - 1): if re.search(f'^{..