코딩테스트

[프로그래머스] [COS Pro] 2급 Python 모의고사

히그다스 2023. 10. 11. 00:16

 

 

각 파트에서 못 푼 것만 리뷰

 

 

빈칸 채우기 문제 안내

빈칸 채우기는 이미 완성된 코드 중 빈칸에 알맞은 코드를 입력하는 문제 타입입니다.
빈칸을 제외한 기본 코드는 수정할 수 없습니다.
빈칸을 채우지 않을 경우, 실행 결과에 에러 메시지가 표시됩니다.

 

1. 공항 방문객

 

 

def func_a(arr, n):
    ret = []
    for x in arr:
        if x != n:
            ret.append(x)
    return ret

def func_b(a, b):
    if a >= b:
        return a - b
    else:
        return b - a

def func_c(arr):
    ret = -1
    for x in arr:
        if ret < x:
            ret = x
    return ret

 

이렇게 함수가 주어지고 빈자리를 채우면 된다

 

def solution(visitor):
    max_first = func_c(visitor)
    visitor_removed = func_a(visitor, max_first)
    max_second = func_c(visitor_removed)
    answer = func_b(max_first,  max_second)
    
    return answer

 

 

func_a는 n빼고 리스트로 만들기

func_b는 방문객수 사이의 차이라고 이해했는데

func_c를 이해를 못해서 ret=x를 x를 -1로 만든다고 착각해버렸다

 

그러니 문제가 풀릴리가 ಥ_ಥ

 

1. func_c로 visitor를 돌려가며 더 큰 수를 찾는 걸 하고 → 최대 방문객 수

2. func_a의 n자리에 max_first를 넣어서 최대 방문객수 빼고 리스트 만들기

3. func_c로 visitor_removed를 돌려가며 더 큰 수를 찾는 걸 하고 → 두번째 많은 방문객 수

4. 마지막으로 두개를 빼서 최대와 두번째로 많은 방문객 수 사이의 차이 찾기

 

이게 왜 그리 어렵던지... 답을 알고나면 쉽다

 


 

디버깅(Debugging) 문제 안내

디버깅(Debugging)은 이미 완성된 코드에서 버그를 찾아 수정하는 문제 타입입니다.
1줄만 수정하여 버그를 고치세요.
2줄 이상 수정할 경우, 실행 결과에 에러 메시지가 표시됩니다.

 

2. 름에 "j" 또는 "k"가 들어가는 사람

 

 

이게 기존 코드

 

def solution(name_list):
    answer = 0
    for name in name_list:
        for n in name:
            if n == 'j' or n == 'k':
                answer += 1
                continue
    return answer

 

이게 정답 코드

 

def solution(name_list):
    answer = 0
    for name in name_list:
        for n in name:
            if n == 'j' or n == 'k':
                answer += 1
                break
    return answer

 

이건 왜 틀렸냐...

난  5번째 줄이 문제일거라고 생각했다....

 

if n == 'j' or n == 'k':

 

이거만 뜯고 씹고 맛보다 답을 찾았는데 

전혀 엉뚱한걸 괴롭히고 있었던 것이다

 

중간에 아주 잠깐 countinue가 문제인가 싶었는데 break를 떠올리진 못했다

 


 

이건 내가 코드를 작성하는 문제

 

3. k번째로 작은 수

 

 

이걸 못 푼 이유 : 내가 이런 문제에 약함...shit....

아직도 for문, append 이런거를 적재적소에 못쓴다

 

로직 자체는 내가 생각한 거랑 50% 정도는 일치하는데

그걸 풀어내는 능력이 없어요...

 

 

def solution(arr, k):
    answer = 0
    list=[]
    
    for i in range(len(arr)):
        for j in range(4):
            list.append(arr[i][j])
            
    list.sort()
    answer = list[k-1]
    
    return answer

 

 

쨋든 모의고사 하나 풀어봤으니

내일 차분하게 풀기만 하면 됨

 

난 항상 문제를 제대로 안보는게 문제라

차분히 생각 가다듬어 가면서 하면 잘 풀 수 있으리라 믿는다

 

 


도움받은 블로그 : https://blog.naver.com/stj1407/221467619821

 

COS Pro 2급 Python 모의고사 체험하기 문제 풀이 및 정답 해석 (1~5)

COS Pro 2급 Python 모의고사 체험하기 문제 풀이 및 정답 해석 (1~5) 프로그래머스 programmers 10개...

blog.naver.com

출처 : 프로그래머스, YBM