greedy 9

[Python] 24553. 팰린드롬 게임

문제 https://www.acmicpc.net/problem/24553 24553번: 팰린드롬 게임 첫째 줄에 테스트 케이스의 개수 $T$가 주어진다. ($1 \le T \le 1\,000$) 둘째 줄부터 $T$개의 줄에 걸쳐, 돌 무더기에 쌓여 있는 돌의 개수 $N$이 주어진다. ($1 \le N \le 10^{18}$) www.acmicpc.net 풀이 과정 시간제한을 보고 구현은 아니겠다고 생각했는데, 그리디 방법을 찾는 것에 시간이 걸렸다. 그것은 주어진 돌의 개수 n이 10의 배수인지 아닌지로 바로 판단할 수 있다. n이 10의 배수인 경우는 승우가 아무리 머리를 쓰더라도 상윤이가 이기게 된다. 예) n = 10 / 승: 9(승우가 몇 개를 가져와도 나머지가 생김) / 상윤: 1 ➡︎ 상윤 승..

Algorithm/Baekjoon 2022.09.19

[Python] 1339. 단어 수학

n = int(input()) # 단어의 개수 words = [[] for _ in range(8)] # 단어를 자리 수별로 저장할 리스트 word_dic = {} # 단어 값을 넣을 딕셔너리 for i in range(n): word = input() # 단어 입력받기 len_word = len(word) for j in range(len_word): words[7-j].append(word[len_word-j-1]) # words에 자리 별로 단어 넣어주기 word_dic[word[j]] = word_dic.get(word[j], 0) + 10 ** (len_word-j-1) # 해당 자리에 맞는 값 넣기 numbers = [] for num in word_dic.values(): # 알파벳 빼고 값..

Algorithm/Baekjoon 2022.01.15

[Python] 11047. 동전 0

n, k = map(int, input().split()) # 동전 종류 수 n, 만들 가치의 합 k coins = [int(input()) for _ in range(n)] cnt = 0 # 총 사용한 동전 개수 for i in range(n-1, -1, -1): # 큰수부터 시작 if k < coins[i]: # k보다 동전이 크면 pass continue # 동전이 k보다 작은 경우 temp = k // coins[i] # i번째의 동전으로 만들 수 있는 최대 수 k -= coins[i] * temp # i번째의 동전으로 만들 수 있는 가치만큼 빼준다. cnt += temp # 방금 사용한 동전 수를 cnt에 합쳐준다. if not k: # k가 0이 되면 중단 break print(cnt) 큰 동..

Algorithm/Baekjoon 2021.09.28

[Python] 1859. 백만장자 프로젝트

구현 코드 # 매도 def sell(benefit, today, buy): # 산거 다 팔때까지 반복 while buy: # 오늘 포인트에서 샀던거 차이 만큼 더해주기 benefit += (today - buy.pop()) return benefit t = int(input()) for idx in range(1, t+1): n = int(input()) # pop 사용할거기 때문에 받아온 매매가들을 뒤집어 준다. deal = list(map(int, input().split()))[::-1] buy = [] # 매수한 리스트 benefit = 0 # 이익 max_point = max(deal) # 최고 주가 while deal: today = deal.pop() # 오늘 주가 # 오늘 매매가가 최고 주..

[Python] 큰 수 만들기

def solution(number, k): answer = [number[0]] for num in number[1:] : while len(answer)>0 and answer[-1] 0 : answer.pop() k -= 1 answer.append(num) if k != 0 : answer = answer[:-k] return ''.join(answer) 풀이 1. answer에 값을 순서대로 삽입한다. 2. 들어오는 값이 answer에 있는 값보다 크다면 answer의 값을 빼주고 k에서 1을 빼준다. (반복) 3. k만큼 숫자를 빼주지 못했다면, 뒤에서부터 k만큼(남은 부분) 삭제해준다. * 처음에 while 대신 if를 썼었는데 그렇게 되면, test 3번 "4177..