Data Analyst KIM

#1. Coding Club (프로그래머스-코드처리하기,배열만들기2,무작위k개,옹알이) 본문

일상/Coding Club

#1. Coding Club (프로그래머스-코드처리하기,배열만들기2,무작위k개,옹알이)

김두연 2023. 5. 18. 14:50
반응형

Coding Club을 하게 된 이유 

먼저 파이썬에 대한 이해도가 부족하였고 프로그래밍 능력을 향상 시킬 필요성을 느꼈다.

대학원을 다니는 형이 프로그래머스 코딩테스트를 통해 연습을 해보라고 권유를 해주셨다.

형에게 친구들과 함께 체계를 가지고 진행했었던 이야기를 들어서 Coding Club을 통해서 함께 공부를 하고자 했다.

 

Coding Club 운영체계

 

추천을 해주신 대학원 형과 동기2명과 함께 총 4명이서 Coding Club에서 공부를 한다.

매주 1번 모여서(주로 목요일) 문제를 풀어와서 각자의 코드를 설명하고 공유하여 최종으로 개선점을 찾아나간다.

현재는 3문제를 골라서 1문제씩 담당하여 풀이를 설명하고 공통문제인 1문제를 더 추가하여 본인이 풀어와야하는 문제는 기본으로는 2문제이지만 4문제를 모두 풀어오는 것으로 진행하고있다.

 

풀어온 문제에 대해 코드를 설명하는 '나'

[프로그래머스] 내가 문제를 해결 했는지 여부
옹알이 - 공통문제 X
코드 처리하기(김) O
배열 만들기2(권) X
무작위k개(서) O

옹알이의 문제가 Lv0중에서는 가장 정답률이 낮았고 코드를 작성은 했지만 결국 해결은 못했다.

다른 사람들의 코드를 보며 내가 미처 생각하지 못한 것을 발견할 수 있었다. 옹알이는 내가 문제를 풀게되면 다시 블로그에 작성을 하겠다.

 

먼저 코드 처리하기 문제이다.

# <내코드>
def solution(code):
    ret = ''
    mode = 0
    for i in range(len(code)) :
        if mode == 0 :
            if code[i] != "1":
                if i % 2 == 0 :
                    ret += code[i]
            else : 
                mode = 1 
        else : 
            if code[i] != "1":
                if i % 2 == 1 :
                    ret += code[i]
            else : 
                mode = 0
    if ret == "":
        return "EMPTY"
    else :            
        return ret
# <다른사람 코드>
def solution(code):
    answer = ''
    mode = 0
    for i in range(len(code)):
        if mode == 0:
            if code[i] == "1":
                mode = 1
            elif i % 2 == 0:
                answer += code[i]
        elif mode == 1:
            if code[i] == "1":
                mode = 0
            elif i % 2 == 1:
                answer += code[i]
    if len(answer) == 0:
        return "EMPTY"
    else:
        return answer

거의 똑같은 코드라고 볼 수 있다.

하지만 또 다른 사람의 코드를 살펴보자면 

# <다른사람코드>
def solution(code):
    mode = 0
    result = ''
    for i in range(len(code)):
        if code[i] == '1':
            mode += 1
        else:
            if (mode % 2 == 0) & (i % 2 == 0): # mode = 0 일때 짝수 추가
                result += code[i]
            elif (mode % 2 == 1) & (i % 2 == 1): # mode = 1 일때 홀수 추가
                result += code[i]
    if len(result) == 0:
        return 'EMPTY'
    else:
        return result

굳이 if문을 한번더 안쓰고 &를 통해서 묶은 것을 볼 수 있다.

추가로 mode를 0과1로 계속 치환을 하는 것이 아닌 mode에 계속더하되 짝수,홀수의 기준으로 나눈 것을 통해 코드를 더 줄일 수 있었던 것같다.

 

'무작위로 k개의 수 뽑기'에서 다른친구의 코드와 내코드를 비교해보며 다음에는 어떻게 코딩을 하는것이 효율적인 지를 생각해볼 수 있었다.

# <내코드>
def solution(arr, k):
    answer = []
    for i in range(len(arr)) :
        num = arr[i]
        if num not in arr[:i]:
            answer.append(num)
        
        if len(answer) == k :
            break
            
    while len(answer) < k:
        answer.append(-1)
    return answer
# <다른사람코드>
def solution(arr, k):
    answer=[]
    for i in arr:
        if i not in answer:
            answer.append(i)
        if len(answer) == k:
            break
    if len(answer)==k:
        return answer
    else:
        for i in range(k-len(answer)):
            answer.append(-1)
        return answer

 

 


4문제 중 2문제를 안푼것이아니라 못푼것이다...

못풀어갔던 문제는 다른 사람의 코드를 봐도 약간 이해가 안되는 부분도 있었다..

앞으로는 꼭 4문제를 모두 풀어서 가는 것을 목표로 해서 함께 공유하며 공부할 수 있도록 해야겠다.

 

다음주 목요일까지의 과제는 다음과 같다.

[프로그래머스] 문제 발표자
배열 조각하기
평행
정수를 나선형으로 배치하기
안전지대(공통)  

 

꼭 4문제 다 풀기!!
반응형