728x90
반응형
SMALL

그리디 33

[Python] 16435번 스네이크버드

✏️ 문제 문제 파악배열을 정렬하면 쉽게 풀 수 있는 문제이다. 과일의 높이를 넣은 배열을 정렬한 후에 과일의 높이와 스네이크버드의 길이가 같으면 먹을 수 있기 때문에 길이 += 1 하고 아니면 break 해서 스네이크버드의 길이를 출력하는 방향으로 코드를 짰다. 알고리즘그리디 알고리즘정렬  코드n, l = map(int, input().split())apple = list(map(int, input().split()))apple.sort()for i in range(len(apple)): if apple[i] > l: break else: l += 1print(l)

PS/BOJ 2024.07.17

[Python] 1417번 국회의원 선거

✏️ 문제 문제 파악득표수 배열을 A로 가정하자. 처음엔 if max(A) > A[0] 이라는 조건문이 true면 최댓값을 가지고 있는 후보의 득표수를 -1 하고 A[0]에 득표수 +1, 매수해야 하는 사람수 +1 하는 방향으로 코드를 짰다.이렇게 짜니 무한루프를 돌고 있었고 생각해보니 다솜이가 원하는 A[0]이 배열의 최댓값이 되면 A[0]의 값이 계속 -1, +1, -1, +1 을 반복하게 되기 때문이었다. 그래서 max(A) == A[0] 라는 조건문을 사용하여 코드를 새로 짜니 해결되었다.또한 최대 득표수를 가지고 있는 후보에 A[0]가 있으면서 (and) 여러 후보라면 1명만 매수하면 되므로 매수해야 하는 사람을 +1 해주었다. 알고리즘그리디 알고리즘구현자료 구조시뮬레이션우선순위 큐  코드n =..

PS/BOJ 2024.07.17

[Python] 2847번 게임을 만든 동준이

✏️ 문제 문제 파악마지막에 오는 점수가 제일 큰 점수가 되어야 하므로 배열을 끝에서부터 훑으며 마지막 점수를 기준으로 앞에 있는 점수들을 바로 뒤에 있는 점수보다 1점 더 작은 점수로 감소하는 방향으로 코드를 짰다. 알고리즘그리디 알고리즘  코드n = int(input())de = 0score = []for i in range(n): score.append(int(input()))for i in range(n-1, 0, -1): # 뒤에서부터 읽어오기 if score[i-1] - score[i] > 0: # 크면 바로 뒤에 있는 점수보다 1점 작은 점수가 되도록 조정 de += (score[i-1] - score[i] + 1) score[i-1] = score[i] - 1 elif..

PS/BOJ 2024.07.16

[Python] 1213번 팰린드롬 만들기

✏️ 문제 문제 파악일단 팰린드롬이 되려면 모든 알파벳이 짝수 개일 때하나의 알파벳만 홀수 개고 나머지는 짝수 개일 때위의 조건이 성립하지 않으면 "sorry ~" 출력   알고리즘그리디 알고리즘구현문자열  코드name = input() count = {}keys = sorted(list(set(name)))odd = []result = ''for key in keys: cnt = name.count(key) count[key] = cnt if cnt % 2 != 0: odd.append(key)if len(odd) > 1: print("I'm Sorry Hansoo")else: for key in keys: result += key * (count[key] // 2) if odd ..

PS/BOJ 2024.07.16

[Python] 14916번 거스름돈

✏️ 문제 문제 파악이거 설탕 배달이랑 똑같은 알고리즘이다. 보자마자 설탕 배달 생각남..최소 개수를 출력해야 되므로 큰 단위인 5원부터 비교하지만 5원보다 크다고 무조건 5원으로 나누도록 코드를 짜지 않는 게 포인트이다.  예제1의 경우 5원으로 나누게 되면 5원 2개가 나오고 나머지가 3이므로 거슬러 줄 수 없다고 나올 수 있기 때문이다. 이 점을 잘 생각하여 코드를 작성해야 한다. 알고리즘그리디 알고리즘다이나믹 프로그래밍수학  코드n = int(input())count = 0while n >= 0: if n % 5 == 0: # 5원으로 나눴을 때 나머지가 없는 경우에만 5원으로 나눔! count += int(n // 5) print(count) break n -= 2 ..

PS/BOJ 2024.07.16

[Python] 1946번 신입 사원

✏️ 문제 문제 파악처음에 문제를 이해한다고 시간을 좀 잡아먹었었다..  다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다. 이게 무슨 말이냐면 일단 서류나 면접 둘 중에 하나라도 1등인 사람은 다른 어떤 지원자들보다 성적이 높으므로(동석차 없음) 무조건 뽑히게 된다. (한 사람이 두 개 다 1등이면 그 사람만 선발)  그럼 이제 이 1등한 사람을 기준으로 비교하면 되는데 2번째 테스트 케이스를 보면 서류 1등인 사람이 면접 4등인 걸 볼 수 있다. 그럼 면접에서는 이 사람보..

PS/BOJ 2024.07.15

[Python] 1439번 뒤집기

✏️ 문제 문제 파악첫 문자와 다른 문자의 덩어리 개수(?)와 문제에서 구해야 하는 행동의 최소 횟수가 같아서예제1의 경우 첫 문자인 0과 다른 1의 덩어리 개수가 1개이므로 이 11을 한 번에 바꾸면 바로 적합하게 된다. 그래서 이를 기준으로 다른 문자 덩어리(?)가 끝나는 부분을 활용하여현재 문자가 첫 문자와 다르고 and 현재 문자의 다음 문자가 첫 문자와 같으면 횟수를 +1 하는 걸로 처음에 코드를 짰다.하지만 이렇게 하게 되면 입력이 00000001로 들어올 때 예상 출력인 1이 아닌 0으로 나오게 된다.  그래서 조건을 수정하여 현재 문자가 첫 문자와 같고 and 현재 문자의 다음 문자가 첫 문자와 다르면 횟수를 +1 하는 걸로 코드를 수정하였다. 알고리즘그리디 알고리즘문자열  코드s = in..

PS/BOJ 2024.07.15

[Python] 13305번 주유소

✏️ 문제 문제 파악가격을 배열에 차례대로 넣었을 때 현재 주유소의 가격이 이전 주유소 가격보다 작으면 현재 주유소 가격으로 거리를 계속 간다고 생각하면서 코드를 짠다. 주유소 가격을 계속 비교하지만 더 저렴한 가격으로 거리를 계속 가도록 알고리즘그리디 알고리즘  코드N = int(input())length = list(map(int, input().split()))price = list(map(int, input().split()))result = 0stard = price[0]for i in range(N-1): if price[i]

PS/BOJ 2024.07.15

[Python] 1026번 보물

✏️ 문제 문제 파악배열 A를 오름차순, 배열 B를 내림차순으로 배열한 후 각각 곱해주면 제일 쉽게 해결할 수 있으나 배열 B를 재배열하면 안된다는 조건을 넣으면 생각을 좀 해야한다. 배열 A에서 최소값, 배열 B에서 최대값은 max, min 함수를 통해 가져올 수 있다. 그 후 각각의 배열에서 지우면 최소값, 최대값이 갱신되어 계속해서 뽑아낼 수 있을 것이다. 이를 활용하자! 알고리즘수학그리디 알고리즘정렬  코드 배열 B 재배열 가능N = int(input())s = 0A = list(map(int, input().split()))B = list(map(int, input().split()))A.sort()B.sort(reverse=True)for i in range(N): s += A[i]*B[i]..

PS/BOJ 2024.07.14

[Python] 1931번 회의실 배정

✏️ 문제 문제 파악시작하는 시간을 기준으로 회의실을 사용하게 된다면 예제1과 같은 경우 6시간을 사용하게 되어 최대 사용할 수 있는 회의의 최대 개수가 되지 않는다. 그럼  끝나는 시간을 기준으로 회의실을 사용하면사용 중인 회의의 끝나는 시간이 다른 회의의 시작하는 시간과 같거나 작으면 회의실을 또 사용할 수 있게 되므로 이 조건을 기준으로 코드를 짜면 된다. 알고리즘그리디 알고리즘정렬  코드N = int(input())meetings = []result = 0for i in range(N): start, end = map(int, input().split()) meetings.append((end, start))meetings.sort() # end 시간을 기준으로 오름차순 배열# print(..

PS/BOJ 2024.07.14
728x90
반응형
LIST