- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

Level1 문제고, 스스로 푼 문제다!

 

participant 중에 마라톤을 완료하지 못한 한 명을 찾아 이름을 반환해야한다 

 

1.

not in completion으로 풀 수도 있지만, 동명이인인 경우에 participant에 동명이인이 있고, 그 중 한명이 completion에 없다면 complete하지 못했는데 complete했다고 여겨질 수 있다 

 

2. 

그래서 이름에 해당하는 사람 수를 딕셔너리에 저장한 후 completion에서 이름이 있을 때마다 값을 -= 1 하는 방식으로 진행한 다음 

 

3.

통과하지 못한 사람은 마지막에 키 값이 1일 것이므로 해당 키를 반환하면 된다 

 

- 정답 풀이 :

def solution(participant, completion):
    result = {}
    answer = ''
    
    for name in participant : 
        if name not in result:
            result[name] = 1
        else:
            result[name] += 1
            
    for name in completion : 
        if name in result:
            if result[name] != 0 :
                result[name] -= 1
                
    for name in result:
        if result[name] != 0 :
            answer += name
            
    return answer

 

- 다른 풀이 :

Counter 모듈을 이용해서 각 리스트의 차이를 구해 정답을 찾는 풀이다 

from collections import Counter

def solution(participant, completion):
    result = Counter(participant) - Counter(completion)
    return list(result.keys())[0]

- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

Level 1 문제이고, 스스로 푼 문제다!

 

stages의 각 인덱스는 사용자의 번호이고, 각 값은 각 유저가 있는 스테이지 번호다 

stage[i] 값은 i 유저가 있는 스테이지이고, 이를 아직 깨지 못한 상태다. 따라서 i 는 stage[i] 단계에서 실패한 유저에 속한다 

각 단계에 대해 전체 유저를 완전탐색으로 돌면서 각 단계에서 실패한 유저 수를 구한다음 해당 스테이지에서 성공한 유저들의 수로 나눈다. 이 값을 fail 해당 단계 값에 추가한다 

 

처음에는 fail을 리스트로 구현하려고 했지만 실패율로 내림차순 정리하고, 인덱스를 출력해야하므로 해당 실패율에 대응하는 값도 필요해서 딕셔너리로 구현했다 

 

주의할 점

실패율 자체가 소수이기 때문에, ' // ' 연산을 사용하면 다 0으로 나와서 틀린다

그렇기 때문에 ' / ' 연산을 이용하고, onStage == 0 일 때는 런타임 에러가 발생하므로, onStage != 0 일 때에만 진행한다 

 

딕셔너리의 value로 정렬하는 법 공부하기 

sorted_value = sorted(fail.items(), key = lambda x : x[1], reverse = True)

#print(sorted_value)
[(4, 1.0), (1, 0.0), (2, 0.0), (3, 0.0)]

 

- 정답 풀이 :

def solution(N, stages):
    answer = []
    #해당 스테이지에 있는 유저 수 
    onStage = len(stages)
    fail = {}
    
    for i in range(1, N + 1):
        fail[i] = 0 
    
    for i in range(1, N + 1):
        count = 0 
        for j in range(len(stages)):
            #i 스테이지 못 깬 사람 수 구하기 
            if stages[j] == i:
                count += 1
        #이거 추가해야 런타임 에러 발생하지 않는다 
        if onStage != 0:                
            fail[i] += (count / onStage)
            onStage -= count
        
    sorted_value = sorted(fail.items(), key = lambda x : x[1], reverse = True)
    
    for i in sorted_value:
        answer.append(i[0])
        
    return answer

- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

Level1 이고, 스스로 푼 문제다!

1,2,3번 수포자가 있고 이들이 수학 모의고사에서 답을 찍는 패턴을 one, two, three 리스트에 저장한 다음에 

각 리스트 별로 몇 문제를 맞혔는지 socre()함수로 진행하고 final 리스트 각 원소에 누적한다 

final은 전역 변수로 score() 함수에서도 사용할 수 있게 했다

 

가장 많은 문제를 맞힌 사람을 answer에 추가하는 건데 

처음에는 한 문제 이상 맞힌 사람을 넣다보니 틀렸었다 

주어진 조건대로 다시 작성하니 정답이 떴다 (언제나 그렇듯이 문제를 꼼꼼히 읽자 제발!!)

 

 - 정답 풀이 :

def score(arr, answers, x):
    i = 0
    for ans in answers:
        if i == len(arr):
            i = 0
        if ans == arr[i]:
            final[x] += 1
        i += 1
        
final = [0,0,0]                        
def solution(answers):
    answer = []
    global final
    one = [1,2,3,4,5]
    two = [2,1,2,3,2,4,2,5]
    three = [3,3,1,1,2,2,4,4,5,5]
    
    score(one, answers, 0)
    score(two, answers, 1)
    score(three, answers, 2)
               
    for i in range(1,4):
        if final[i - 1] == max(final):
            answer.append(i)
    answer.sort()
    
    return answer

 

- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

Level1 문제이고, 스스로 푼 문제다!

간단한 정렬 문제이고, 주의해야할 점은 문제에서 주어진 인덱스는 실제 인덱스 + 1 이기 때문에 이를 고려해서 

코드를 작성해야 IndexError가 발생하지 않는다 

 

- 정답 풀이 :

def solution(array, commands):
    answer = []
    
    for arr in commands:        
        i,j = arr[0] - 1, arr[1] - 1
        temp = array[i : j + 1]
        temp.sort()
        #문제에서 주어진 인덱스는 다 +1이 되어있으니까 -1 해줘야 IndexError가 발생하지 않음
        answer.append(temp[arr[2] - 1])
        
    return answer

+ Recent posts