우당탕탕 개발일지
[해싱] Softeer level 2 진정한 효도 (Python 파이썬) 본문
💡문제 링크
💡문제 분석 요약
3*3 크기의 땅이 있다. 땅의 높이가 같은 1*3에서만 농사를 지을 수 있다.
부모님께 효도하기 위해 땅의 높이를 높이거나 낮춰서 농사를 지을 수 있는 1*3 땅을 만들어드리려 한다.
높이를 1만큼 낮추거나 높일 때 1만큼의 비용이 소요된다.
최소비용을 구하시오.
💡알고리즘 설계
1. 가로 3개, 세로 3개 땅의 조합에 대한 정보를 farms 배열에 넣기
2. 최소비용이 0이 될 수 있는지 구하기(파이썬의 리스트.count() 함수 사용)
3. 최소비용이 0이 될 수 없다면 최소한의 비용이 뭔지 구하기(땅 조합별 비용 정보를 담은 result 딕셔너리를 활용)
💡코드
import sys
farms = []
result = { "112": 4, "121": 4, "211": 4,
"113": 2, "131": 2, "311": 2,
"122": 1, "212": 1, "221": 1,
"123": 2, "132": 2, "213": 2, "231": 2, "312": 2, "321": 2,
"133": 2, "331": 2, "313": 2,
"223": 1, "322": 1, "232": 1,
"233": 1, "332": 1, "323": 1 }
# 농사 지을 수 있는 영역에 대한 정보를 farms 배열에 담기
for _ in range(3):
a, b, c = list(map(int, input().split()))
farms.append([a, b, c])
farms.append([farms[0][0], farms[1][0], farms[2][0]])
farms.append([farms[0][1], farms[1][1], farms[2][1]])
farms.append([farms[0][2], farms[1][2], farms[2][2]])
# 출력값이 0이 될 수 있는지 확인
answer = 999
for farm in farms:
if farm.count(1) == 3 or farm.count(2) == 3 or farm.count(3) == 3:
answer = 0
break
# 0이 아닐 경우
if answer == 0:
print(answer)
else:
for farm in farms:
f = "".join(map(str, farm))
a = result[f]
answer = min(answer, a)
print(answer)
💡 느낀점 or 기억할정보
첫 시도에 깔끔하게 해결한 문제.
다 푸는데 20분정도밖에 안 걸렸다.
result 딕셔너리를 만드는게 정말 좋은 방법이었다!
그리고 answer를 마지막에 처리할 때 min(answer, a)도 좋았다.
'알고리즘' 카테고리의 다른 글
[해싱] Softeer level 2 GBC (Python 파이썬) (1) | 2024.03.22 |
---|---|
[정렬] Softeer level 2 금고털이 (Python 파이썬) (0) | 2024.03.17 |
[해싱] Softeer level 3 성적 평균 (Python 파이썬)(반올림, 소수점) (1) | 2024.03.15 |
[반복문/인덱싱/대문자] Softeer level 2[한양대 HCPC 2023] X marks the Spot(Python 파이썬) (1) | 2024.03.15 |
[반복문] Softeer level 2 연탄의 크기 (Python 파이썬) (0) | 2024.03.15 |