문제https://school.programmers.co.kr/learn/courses/30/lessons/42888?language=javascript 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 자바스크립트function solution(record) { // 객체에 Key Value를 통해 user의 정보를 등록 또는 변경 let userDb = {}; for (const event of record) { const eventList = event.split(' ') if (eventList[0] === "Enter" || eventList[0] === ..
문제 https://www.acmicpc.net/problem/3980 3980번: 선발 명단 각각의 테스트 케이스에 대해서, 모든 포지션의 선수를 채웠을 때, 능력치의 합의 최댓값을 한 줄에 하나씩 출력한다. 항상 하나 이상의 올바른 라인업을 만들 수 있다. www.acmicpc.net 설계 - dfs를 들어가며 11명의 선수를 확인한다. - 자리가 배치된 선수 번호를 visit 배열에 추가 및 삭제하며 한 번호당 한명씩만 들어가게 한다. 파이썬 def dfs(sumV, level): global maxV, visit if level == 11: if maxV < sumV: maxV = sumV return for i in range(11): if arr[level][i] and i not in vis..
문제 https://www.acmicpc.net/problem/1032 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net 설계 - 주어지는 입력값은 모두 같은 길이로 주어진다. 파이썬 N = int(input()) arr = [input() for _ in range(N)] answer = '' for i in range(len(arr[0])): now = arr[0][i] flag = 0 # 하나라도 일치하지 않을 경우 표시 for j in range(1, N): if now != arr[j][i]: f..
문제 https://www.acmicpc.net/problem/1283 1283번: 단축키 지정 첫째 줄에 옵션의 개수 N(1 ≤ N ≤ 30)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄에 옵션을 나타내는 문자열이 입력되는데 하나의 옵션은 5개 이하의 단어로 표현되며, 각 단어 역시 10개 이하 www.acmicpc.net 설계 - 1. 띄어쓰기를 기준으로 나눠진 단어의 첫번째 이니셜만 확인한다. - 1번 조건을 만족하지 못했을 경우 각 단어의 문자를 하나씩 확인한다. 파이썬 bucket = [0] * 100 N = int(input()) for _ in range(N): arr = list(map(str, input().split())) shortcut = 0 # 단축키가 지정되어있는지 확인 #..
문제 https://www.acmicpc.net/problem/2302 2302번: 극장 좌석 주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1) www.acmicpc.net 설계 - vip 사이의 구간별 자리수를 cal 함수에 넣는다. - cal 함수로 구간별 경우의 수를 구한 뒤 answer에 곱한다. 파이썬 # 앉을 수 있는 경우의 수를 계산하는 점화식 함수 def cal(n): if n == 1: return 1 elif n == 2: return 2 elif n == 3: return 3 else: dp = [0] * (n + 4) dp[0], dp[1] = 1, 1..
문제 https://www.acmicpc.net/problem/2304 2304번: 창고 다각형 첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의 www.acmicpc.net 설계 파이썬 N = int(input()) arr = [list(map(int, input().split())) for _ in range(N)] arr.sort() # 가장 높은 기둥의 크기와 index 찾기 maxI, maxV = 0, 0 for i in range(N): if maxV < arr[i][1]: maxV = arr[i][1] maxI = i # 앞에서부터 가..
문제 https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 설계 파이썬 N, K = map(int, input().split()) arr = [i + 1 for i in range(N)] answer = [] now = K - 1 while len(arr): answer.append(arr[now]) arr.pop(now) now = now + K - 1 # pop을 먼저 했으므로 숫자 1개가 줄어든다. if len(arr) > 0: # zero division 방지 now %= len(arr) # 결과 출력 print('', sep='')
문제 https://school.programmers.co.kr/learn/courses/30/lessons/43165# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 파이썬 def dfs(level, sumV, numbers, target): global answer if level == len(numbers): if sumV == target: answer += 1 return for i in range(2): if i == 0: dfs(level+1, sumV + numbers[level], numbers, target) elif i == 1:..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 파이썬 - 주어진 배열 × 2를 하여 배열이 순회하는 형태로 만들어준다. def solution(elements): answer = [] N = len(elements) # elements를 2배로 늘리기 때문에 원래 길이를 저장한다. elements = elements * 2 # 수열을 2배로 늘려 index를 순환시킨다. for i in range(N): for j in range..
문제 https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 설계 - 소수 : 1과 자기 자신으로만 나누어지는 수 - 2 ~ n-1 까지 모든 수로 나누어 판별 가능하지만 비효율적이다. - 에라토스테네스의 체 : 제곱근까지만(가운데 약수까지만) 확인하면 된다 M = int(input()) N = int(input()) bucket = [] for i in range(M, N + 1): if i == 1: # 예외처리 중요! 1일 경우 소수가 될 수 없다. con..