Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- CRM
- 태블로 포트폴리오
- 미래에셋 공모전
- 아셈듀오 선정
- 제네바
- 교환학생주거
- 아셈듀오 후기
- MairaDB
- HEG
- 데이터 시각화 포트폴리오
- 데이터 포트폴리오
- 공모전후기
- 두잇알고리즘코딩테스트
- 아셈듀오
- 제네바기숙사
- 텍스트분석 시각화
- 패스트캠퍼스 #자료구조 #코딩테스트 #배열
- 제네바주거
- 파이썬
- 무신사 데이터분석
- 리뷰분석
- 태블로
- tableau
- 데이터 분석 포트폴리오
- 데이터공모전
- 제네바경영대학교
- 교환학생
- 키워드시각화
- 교환학생 장학금
- 테이블계산
Archives
- Today
- Total
민듀키티
[4월 - 코딩테스트] 그리디 문제 풀이 모음 본문
내가 풀이한 그리디 문제
1. 프로그래머스 구명보트
https://school.programmers.co.kr/learn/courses/30/lessons/42885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import deque
def solution(people, limit):
A = list()
for person in people :
A.append(person)
A.sort()
A = deque(A)
count = 0
while len(A)>1:
data_1 = A.popleft() #작은 수
data_2 = A.pop() #큰 수
temp = data_1 + data_2
if temp > limit :
count += 1
A.appendleft(data_1)
elif temp <= limit :
count +=1
if len(A) == 1 :
return count + 1
else :
return count
2. 백준 동전개수의 최솟값 구하기
https://www.acmicpc.net/problem/11047
N,M = map(int, input().split())
A = list()
for i in range(N):
A.append(int(input()))
count = 0
for i in range(N-1,-1,-1):
if M >= A[i] :
count += int(M/A[i])
M = M%A[i]
print(count)
3. 백준 ATM
https://www.acmicpc.net/problem/11399
N = int(input())
A = list(map(int, input().split()))
A.sort()
S = [0] * N
S[0] = A[0]
sumnumber = 0
for i in range(1,N) :
S[i] = S[i-1] + A[i]
for j in S :
sumnumber += j
print(sumnumber)
4. 백준 보물
https://www.acmicpc.net/problem/1026
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
A.sort()
B.sort(reverse = True)
sumnumber = 0
for i in range(N) :
sumnumber += A[i] * B[i]
print(sumnumber)
5. 백준 잃어버린 괄호
https://www.acmicpc.net/problem/1541
A = input().split("-")
answer = 0
def plus(k) :
B = k.split("+")
sumnum = 0
for j in B :
sumnum += int(j)
return sumnum
for i in range(len(A)) :
M=plus(A[i])
if i == 0:
answer += M
else :
answer -= M
print(answer)
5. 백준 뒤집기
https://www.acmicpc.net/problem/1439
N = input()
count = 0
for i in range(len(N)-1) :
if N[i] != N[i+1] :
count += 1
print((count+1)//2)
6. 전자레인지
- 마지막에 출력값 형태가 리스트 형태인 줄 알고, 계속 리스트 출력하면서 왜 잘못되었는지 못 찾고 있었음
- 전형적인 그리디 - 동전문제와 비슷한 유형
n = int(input())
A = [300,60,10]
count_list = [0,0,0]
for i in range(len(A)) :
if n >= A[i] :
count_list[i] += int(n/A[i])
n = n - (A[i] * count_list[i])
count_list = list(map(str,count_list))
if n==0:
print(' '.join(count_list))
else :
print(-1)
7. A->B
- m(큰 숫자)에서 부터 작은 숫자로 내려오기
- 조건은 크게 3가지
- 2로 나누어 떨어지는 경우
- 마지막 숫자가 1인 경우 ( m%10 == 1 )
- 홀수인 경우 (위의 2가지 경우에 아무것도 해당이 되지 않는 경우
https://www.acmicpc.net/problem/16953
n,m = map(int, input().split())
answer_list = []
while n != m :
if m%2 == 0 and m > n:
m = int(m/2)
answer_list.append(m)
elif m%10 == 1 and m > n :
m = m//10
answer_list.append(m)
else :
answer_list.append(-1)
break
if -1 not in answer_list and answer_list[-1] == n :
print(len(answer_list)+1)
else :
print(-1)
8. 폴리오미노
- stack 으로 풀려다가... 하지만 replace 함수 이용하면 아주 쉽게 풀리는 문제였음 ㅜ
N = input()
N=N.replace('XXXX','AAAA')
N=N.replace('XX','BB')
if 'X' in N :
print(-1)
else : print(N)
9. 세탁소사장 동혁
https://www.acmicpc.net/problem/2720
- 위의 거스름돈 문제랑 구현방법 똑같음
n = int(input()) # 몇 개 들어올건지 ?
def coin_return(m) :
answer_list = [0]*4
if m>=25 :
answer_list[0] = (m//25)
m = m%25
if m>=10 :
answer_list[1] = (m//10)
m = m%10
if m>=5 :
answer_list[2] = (m//5)
m = m%5
if m>=1 :
answer_list[3] = (m//1)
m = m%1
return answer_list
for i in range(n) :
input_number = int(input())
answer = map(str, coin_return(input_number))
print(' '.join(answer))
10. 수들의 합 (⭐️ 복습하기)
- 초반에 실수한 것 : while 문 조건을 < start_index != n-1 and end_index !=n-1 > 이렇게 설정해줌
- 그러나 start_index < n 이렇게 설정해줘야 함
- 내가 초반에 설정한 조건은 start_index와 end_index가 서로 다른 위치에 있는지 여부를 판별해주는 코드임
https://www.acmicpc.net/problem/2003
n,m = map(int, input().split())
A = list(map(int, input().split()))
start_index = 0
end_index = 0
sum = A[0]
count = 0
while start_index != n :
if sum == m :
count += 1
sum -= A[start_index]
start_index += 1
elif sum < m and end_index + 1< n:
end_index += 1
sum += A[end_index]
else :
sum -= A[start_index]
start_index += 1
print(count)
'Coding Test > Python' 카테고리의 다른 글
[4월 - 코딩테스트] 조합론 문제풀이 모음 (0) | 2024.05.02 |
---|---|
[4월 - 코딩테스트] 정수론 문제모음 (0) | 2024.05.02 |
[4월 코딩테스트] DP 문제모음 (0) | 2024.05.02 |
프로그래머스 Python 코딩테스트 (LEVEL 1 - 5) (1) | 2023.04.30 |
프로그래머스 Python 코딩테스트 (LEVEL 1 - 4) (0) | 2023.04.27 |