728x90
반응형
SMALL

그리디 33

[Python] 13417번 카드 문자열

✏️ 문제 문제 파악가장 왼쪽이 두거나 가장 오른쪽에 두는 특징을 보면 양쪽에서 push, pop이 가능한 덱을 사용해서 풀어야한다!!  알고리즘그리디 알고리즘자료 구조문자열덱 코드from collections import deque for _ in range(int(input())): n = int(input()) card = input().split() q = deque() q.append(card[0]) stand = card[0] for i in range(1, len(card)): if stand >= card[i]: q.appendleft(card[i]) stand = card[i] else: q.append(card[i]) ..

PS/BOJ 2024.08.25

[Python] 6550번 부분 문자열

✏️ 문제 문제 파악s 문자열의 문자가 해당할 경우 임의의 변수의 값을 +1 함으로써 "t 문자열을 전부 돌았을 때 임의의 문자열이 s 문자열의 길이와 같으면 s가 t의 부분 문자열이다" 라는 조건을 세워 코드를 짰다. 이렇게 하면 문자열의 순서도 지킬 수 있다. 또한 여기서는 입력의 개수를 따로 입력받지 않는데 이를 무한 반복문으로 짠 후 try-catch문을 사용해서 풀어야한다!(필자는 왜 없지? 이러고만 있었음..)  알고리즘그리디 알고리즘문자열 코드while True: try: s,t = map(str, input().split()) list_s = list(map(str, s)) index = 0 for i in range(len(t)): if index == l..

PS/BOJ 2024.08.25

[Python] 1449번 수리공 항승

✏️ 문제 문제 파악이전에 붙인 테이프의 길이가다음 위치까지 사용할 수 있는 지 (테이프 개수 추가 x)다음 위치까지 테이프 길이가 되지 않아 새로 테이프를 붙여야 하는 지 (테이프 개수 추가 o)조건을 잘 세워 코드를 짜야하는 문제이다. 알고리즘그리디 알고리즘정렬  코드n, l = map(int, input().split())position = list(map(int, input().split()))position.sort()start = position[0]count = 1for i in position[1:]: if (i + 0.5) - (start - 0.5)

PS/BOJ 2024.08.24

[Python] 1343번 폴리오미노

✏️ 문제 문제 파악이전에 붙인 테이프의 길이가다음 위치까지 사용할 수 있는 지 (테이프 개수 추가 x)다음 위치까지 테이프 길이가 되지 않아 새로 테이프를 붙여야 하는 지 (테이프 개수 추가 o)조건을 잘 세워 코드를 짜야하는 문제이다. 알고리즘그리디 알고리즘구현  코드실패한 코드s = input()ary = list(map(str, s.split('.')))x_length = 0for i in range(len(ary)): x_length += len(ary[i]) # X의 전체 개수가 홀수면 -1 출력for i in range(len(ary)): if x_length % 2 != 0: # X 개수가 홀수면 -1 만 출력이므로 첫 조건문으로 줌 print(-1) break else..

PS/BOJ 2024.08.24

[Python] 1448번 삼각형 만들기

✏️ 문제 문제 파악중요한 삼각형의 조건은 다음과 같다." 가장 긴 변은 다른 두 변의 합보다 작다. "이 조건을 만족하게 코드를 짜면 쉽게 해결할 수 있는데 삼각형 세 변의 길이의 합이 최대로 되려면 3연속인 값을 써야한다는 생각을 못하고 3중 for반복문을 썼더니 시간초과가 계속 떴었다 ㅠㅠ..근데 3연속인 값을 안썼을 때 합이 최대가 되는 세 변의 길이는 진짜 없을까...? 알고리즘그리디 알고리즘정렬수학 코드import sysinput = sys.stdin.readlinen = int(input())length = sorted([int(input()) for _ in range(n)], reverse=True)result = -1for i in range(n-2): if length[i]

PS/BOJ 2024.08.18

[Python] 20115번 에너지 드링크

✏️ 문제 문제 파악양이 적은 에너지 드링크를 버리는 방향으로 하는 게 최대의 에너지 드링크 양을 만들 수 있다.그래서 에너지 드링크를 담은 배열을 오름차순 정렬한 후 마지막에 있는 양이 제일 많은 에너지 드링크를 버리지 않는 에너지 드링크로 해서 풀면 쉽게 풀 수있다. 알고리즘그리디 알고리즘 코드n = int(input())drinks = list(map(int, input().split()))drinks.sort()total = drinks[n-1]for i in range(n-1): total += drinks[i]/2print(total)

PS/BOJ 2024.07.25

[Python] 3135번 라디오

✏️ 문제 문제 파악주파수 A에서 B로 가기 위해서 버튼을 누르는 경우는 다음과 같이 2가지가 있다.주파수 A에서 1MHz 단위로 B로 가는 방법: 버튼수 = abs(A-B)주파수 A에서 미리 지정된 주파수로 간 후 B로 가는 방법: 버튼수 = abs((미리 지정된 주파수)-B)+1(여기서 +1 은 미리 지정된 주파수로 가는 버튼수) 알고리즘그리디 알고리즘수학 코드a,b = map(int, input().split())n = int(input())freq = []freq.append(abs(a-b))for i in range(n): freq.append(abs(int(input())-b)+1)print(min(freq))

PS/BOJ 2024.07.25

[Python] 13413번 오셀로 재배치

✏️ 문제 문제 파악작업은 두 가지가 있다.배치된 말 중 임의의 2개의 말을 골라 서로의 위치를 바꾼다.말 1개를 들어 뒤집어 놓아 색상을 변경한다. 나는 다음과 같이 풀었다. if 같은 위치에 있는 문자가 다르다면 if 처음이라면 save 변수 = 초기 상태 문자열의 해당 문자를 저장 else 처음이 아니라면 2번 작업을 해야 하므로 작업 횟수 +1 save 변수 초기화else 같은 위치에 있는 문자가 같다면 if 같은 데 save 변수에 저장되어 있는 값이 있다면 1번 작업을 해야 하므로 작업 횟수 +1 save 변수 초기화근데 자꾸 틀렸다고 나와서ㅠ 결국 못풀었다.. 반례가 뭘까...,.,.?다른 분들 푼 걸 보니 다른 수가 많은 문자의 개수가 정답이 된다는 점을 가지고 푸셨었다. 알고..

PS/BOJ 2024.07.24

[Python] 1817번 짐 챙기는 숌

✏️ 문제 문제 파악나는 다음과 같이 풀었다. m의 값을 어딘가(max_m)에 저장if 책의 무게 최대 무게 최대 무게 = max_m 상자를 새로 사용해야 하므로 상자 개수 +1if 최대 무게 == 0 최대 무게 = max_m예제로 있던 문제는 다 잘나오는데 제출하면 1%에서 계속 틀렸었다.. 반례...다른 분은 현재 박스에 넣어져 있는 무게 + 넣을 책의 무게를 최대 무게와 비교하며 풀었었다.알고리즘은 이게 더 간편한 듯! 알고리즘그리디 알고리즘구현  코드내가 푼 틀린 코드n,m = map(int, input().split())box = 0if n != 0: book = list(map(int, input().split())) max_m = m for i in range(n): if ..

PS/BOJ 2024.07.24
728x90
반응형
LIST