https://school.programmers.co.kr/learn/courses/30/lessons/172927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도: 레벨2
유형: 정렬, 구현
fatigue = fatigue[:sum(picks)] 로 곡괭이로 닿지 못하는 부분을 제거해주지 못해서 처음시도에 100점을 받지 못했다.
아래 알고리즘은 입력광물들을 5개씩 끊어서 각 다이아곡괭이, 철곡갱이, 돌곡괭를 이용했을 시 드는 피로도를 [x,y,z]형태로 fatigue[]에저장하였다.
그 후 fatigue를 스톤, 철 ,다이아 피로도 크기순 으로 정렬하였다.
그리고 fatigue배열을 돌면서 다이아곡괭이, 철곡괭이, 돌곡괭이 순으로 사용하면서 최소 피로도를 구하였다.
#11:16 12:00 테케8번틀림 97.1점 ->12:10 100점
def solution(picks, minerals):
fatigue=[]
dia=0
iron=0
stone=0
for i in range(len(minerals)):
if minerals[i]=="diamond":
dia+=1
if minerals[i]=="iron":
iron+=1
if minerals[i]=="stone":
stone+=1
if dia+iron+stone==5 or i==len(minerals)-1:
dia_fatigue=dia+iron+stone
iron_fatigue= dia*5+iron+stone
stone_fatigue = dia*25+iron*5+stone
fatigue.append([dia_fatigue,iron_fatigue,stone_fatigue])
dia=0
iron=0
stone=0
# 곡괭이로 못캐는 부분을 제거 해줘야함 -> 안해주면 맨뒤에 꼬투리가 정렬 앞으로 가면 안됨
fatigue = fatigue[:sum(picks)]
# 스톤, 철, 다이아가 많은 순으로 정렬
fatigue.sort(key = lambda x: (x[2],x[1],x[0]))
sum_fatigue=0
i=0
print(fatigue)
while fatigue:
i+=1
if i<=picks[0] :
sum_fatigue+=fatigue[-1][0]
fatigue.pop()
elif i<=picks[0]+picks[1]:
sum_fatigue+=fatigue[-1][1]
fatigue.pop()
elif i<=picks[0]+picks[1]+picks[2]:
sum_fatigue+=fatigue[-1][2]
fatigue.pop()
else:
break
return sum_fatigue
'Problem Solving > 정렬' 카테고리의 다른 글
BOJ10814 나이순 정렬 (0) | 2024.02.05 |
---|---|
BOJ1181 단어 정렬 (0) | 2024.02.05 |
BOJ1946 신입 사원 (0) | 2023.04.06 |
BOJ1931 회의실 배정(R) (0) | 2023.03.20 |
두 배열의 원소 교체 (0) | 2023.01.04 |
https://school.programmers.co.kr/learn/courses/30/lessons/172927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도: 레벨2
유형: 정렬, 구현
fatigue = fatigue[:sum(picks)] 로 곡괭이로 닿지 못하는 부분을 제거해주지 못해서 처음시도에 100점을 받지 못했다.
아래 알고리즘은 입력광물들을 5개씩 끊어서 각 다이아곡괭이, 철곡갱이, 돌곡괭를 이용했을 시 드는 피로도를 [x,y,z]형태로 fatigue[]에저장하였다.
그 후 fatigue를 스톤, 철 ,다이아 피로도 크기순 으로 정렬하였다.
그리고 fatigue배열을 돌면서 다이아곡괭이, 철곡괭이, 돌곡괭이 순으로 사용하면서 최소 피로도를 구하였다.
#11:16 12:00 테케8번틀림 97.1점 ->12:10 100점
def solution(picks, minerals):
fatigue=[]
dia=0
iron=0
stone=0
for i in range(len(minerals)):
if minerals[i]=="diamond":
dia+=1
if minerals[i]=="iron":
iron+=1
if minerals[i]=="stone":
stone+=1
if dia+iron+stone==5 or i==len(minerals)-1:
dia_fatigue=dia+iron+stone
iron_fatigue= dia*5+iron+stone
stone_fatigue = dia*25+iron*5+stone
fatigue.append([dia_fatigue,iron_fatigue,stone_fatigue])
dia=0
iron=0
stone=0
# 곡괭이로 못캐는 부분을 제거 해줘야함 -> 안해주면 맨뒤에 꼬투리가 정렬 앞으로 가면 안됨
fatigue = fatigue[:sum(picks)]
# 스톤, 철, 다이아가 많은 순으로 정렬
fatigue.sort(key = lambda x: (x[2],x[1],x[0]))
sum_fatigue=0
i=0
print(fatigue)
while fatigue:
i+=1
if i<=picks[0] :
sum_fatigue+=fatigue[-1][0]
fatigue.pop()
elif i<=picks[0]+picks[1]:
sum_fatigue+=fatigue[-1][1]
fatigue.pop()
elif i<=picks[0]+picks[1]+picks[2]:
sum_fatigue+=fatigue[-1][2]
fatigue.pop()
else:
break
return sum_fatigue
'Problem Solving > 정렬' 카테고리의 다른 글
BOJ10814 나이순 정렬 (0) | 2024.02.05 |
---|---|
BOJ1181 단어 정렬 (0) | 2024.02.05 |
BOJ1946 신입 사원 (0) | 2023.04.06 |
BOJ1931 회의실 배정(R) (0) | 2023.03.20 |
두 배열의 원소 교체 (0) | 2023.01.04 |