우당탕탕 개발일지

[해싱] Softeer level 2 진정한 효도 (Python 파이썬) 본문

알고리즘

[해싱] Softeer level 2 진정한 효도 (Python 파이썬)

민아당긴아 2024. 3. 17. 13:55

💡문제 링크

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

💡문제 분석 요약

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)도 좋았다.