어떻게 불만도를 최소화 해서 등수를 매길 것인가?입력 받은 등수를 먼저 `sort`로 정렬 한 후 생각한 등수와 실제 등수가 다를 경우, 불만도를 구하는 방식으로 해결코드import sysinput = sys.stdin.readlineN = int(input())arr = []dis = 0for i in range(N): arr.append(int(input()))arr.sort()for i in range(N): if arr[i] != i+1: dis += abs(arr[i] - (i+1))print(dis) 정렬, 그리디 핵심로직#1for i in range(N): if arr[i] != i+1: dis += abs(arr[i] - (i+1))1등 부터 마지막 등수 까지 불만도를 가질..
절사평균을 구할 때 가장 높은 난이도에 투표한 a명과 가장 낮은 난이도에 투표한 a명을 평균계산에서 제외해야 하기 때문에 어떻게 제외 할 것인가?파이썬의 slice를 이용하여 구현함맨 처음 내가 구현한 것이 왜 틀렸는가?파이썬의 `round`함수는 0.5 일때 문제에서 기대하는 반올림과 다르게 동작할 수 있음`n == 0`일때의 경우를 고려해야 함코드# 맨 처음에 내가 구현했다가 런타임 오류가 발생한 코드n = int(input())Trimmed = round(n * (15/100))difficulties = []for i in range(n): difficulties.append(int(input()))difficulties.sort()total = len(difficulties)Trimmed_dat..
만약 `push`를 입력받는다면 `push`와 `1`을 어떻게 동시에 처리할 것인가배열을 선언해서 배열의 `0번 인덱스에` 명령을 입력받고, `1번 인덱스`에 숫자를 입력받음입력받는 케이스에 따른 결과값 구분`if ~ elif문`을 사용하여 각 케이스별 결과값을 구분함큐가 비어있는지 안비어있는지 유무를 어떻게 구분할것인가`if not dq:` 를 사용한다면 `dq(큐)`가 비어있다면 실행되게 된다.`pop`을 입력받는 경우 가장 앞의 정수를 빼야한다`pop()` 은 가장 오른쪽의 요소를 반환하기 때문에 `popleft()`를 사용해야함코드from collections import dequequeue = []dq = deque(queue)n = int(input())for _ in range(n): tm..
다음으로 꺼내야 하는 값이 `num`이라면, `num`이 스택 맨 위(top)에 올라올 때까지 `count`를 증가시키며 `push`한다.`push`를 끝낸 뒤 스택 `top`이 `num`이면 `pop`해서 출력(연산 기록에 -)한다.`push`를 더 해도 `top`이 `num`이 될 수 없는 경우가 생기는데, 이때는 수열을 만들 수 없으므로 NO다.코드n = int(input())seq = [int(input()) for _ in range(n)]count = 1stack = []pri = []possible = Truefor num in seq: while count 스택 핵심로직#1count = 1 # 1부터 차례대로 수열에 append하는 숫자stack = [] # 위 숫자가 appe..
이동과정 알아내기1개의 원판만 있을 때는 당연히 바로 옮기면 됨(1번막대→3번막대)n개일 땐1단계 : 1번막대→2번막대로 마지막 원판 빼고 전부 옮긴다2단계 : 1번막대에 남은 1개를 1번막대→3번막대로 옮긴다3단계 : 2번막대→3번막대로 모두 옮긴다이동횟수 알아내기이동횟수는 항상 2^n - 1코드def hanoi(n, start, end): if (n==1): print(start, end) return hanoi(n-1, start, 6-start-end) # 1단계 print(start, end) # 2단계 hanoi(n-1, 6-start-end, end) # 3단계n = int(input())print(2**n-1)if (n 재귀함수 핵심로직#1 hanoi(n-1, st..