Post

Programmers. Mine

광물 캐기

  • practice problem
  • 정답률: 39%
  • 2023.07.24
  • 12:50 ~ 14:20 (90 min)
  • 후기: 광물의 집합을 5개 단위 리스트로 만든 뒤 우선순위를 dia,iron,stone만 고려했을때 테스트케이스 8번이 자꾸 오류가 났다. 조건 중 광물의 순서는 변경 불가하기때문에 곡괭이의 수가 광물 집합보다 작은 경우 슬라이싱 처리를 해야하는 것을 찾는데 시간이 다소 걸렸다.

Code

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
def solution(picks, minerals):
    mineral_list=[]
    total_list =[]
    tired = 0
    dia_num = picks[0]
    iron_num = picks[1]
    stone_num = picks[2]
    total_num = dia_num + iron_num + stone_num
    for idx, i in enumerate(minerals):
        if idx != 0 and idx % 5 == 0:
            total_list.append(mineral_list)
            mineral_list = []
            
        mineral_list.append(i)
        if idx == len(minerals)-1:
            total_list.append(mineral_list)
    
    # 곡괭이 수가 광물의 집합의 수가 같거나 클때
    if len(total_list) <= total_num:
        total_list.sort(key = lambda x:(-x.count('diamond'),-x.count('iron'),-x.count('stone')))
    
    # 곡괭이 수가 광물의 집합의 수보다 작을때
    elif len(total_list) > total_num:
        total_list = total_list[:total_num]
        total_list.sort(key = lambda x:(-x.count('diamond'),-x.count('iron'),-x.count('stone')))
    
    
    for i in total_list:
        for idx, j in enumerate(i):
            if dia_num > 0:
                tired += 1
                
                if idx == len(i)-1:
                    dia_num -= 1
                  
            elif dia_num == 0 and iron_num >0:
                if j == 'diamond':
                    tired += 5
                    
                elif j == 'iron' or 'stone':
                    tired += 1
                    
                if idx == len(i)-1:
                    iron_num -= 1
                 
            elif dia_num ==0 and iron_num ==0 and stone_num >0:
                if j == 'diamond':
                    tired += 25
                    
                elif j == 'iron':
                    tired += 5
                    
                elif j == 'stone':
                    tired += 1
                    
                if idx == len(i)-1:
                    stone_num -= 1
            if dia_num == 0 and iron_num == 0 and stone_num ==0:
                break
    
    return tired
This post is licensed under CC BY 4.0 by the author.