CS & AI/프로그래머스 오답노트

2025.06.26. 프로그래머스와의 조우

Ungbae 2025. 6. 26. 15:10

동아리나 학부 수업 실습 덕분에 백준 알고리즘과는 친했지만 프로그래머스는 처음이었다. 그래서 사이트와 친해지기 위해 Lv0부터 풀어보기로 하였다.

 

 

 


오답 문제 1

 

알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.

단, 알파벳 대문자와 소문자는 구분하지 않습니다.

 

 

 

나의 답안

 

수정 전

def solution(myString, pat):
    if pat in list(myString):
        return 1
    else:
        return 0

 

오답 수정 후

def solution(myString, pat):
    myString_lower = myString.lower()
    pat_lower = pat.lower()
    
    if pat_lower in myString_lower:
        return 1
    else:
        return 0

 

myString의 문자열을 리스트로 만들어 pat가 있는지 찾으라고 하면 어떨까 하는것이 내 아이디어였다.

하지만 list(myString)은 개별 문자를 분리하는 것이지, 부분 문자열을 만드는 게 아니다. 부분 문자열 검색에는 직접 in 연산자를 사용하는 게 가장 효율적이라는 claude의 답변을 받았다.

 

 

매력적이었던 다른 사람의 답안

def solution(myString, pat):
    return int(pat.lower() in myString.lower())

 

int(True) : 1, int(False) : 0 임을 이용해서 불리언을 사용한 점이 매우 인상적이었다.

 

 

 


오답 문제 2

 

정수 배열 arr가 주어집니다. arr 의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return하는 solution 함수를 완성해주세요.

 

 

나의 오답 답안

def solution(arr):
    for i in arr:
        if i >= 50 and i % 2 == 0:
            return i//2
        else: return i*2

 

그냥 문제를 읽고 생각나는 대로 적었다. 적은 내가 봐도 개판이다. 그래도 얼추 맞을 줄 알았으나...

말도 안되는 소설이었다.

 

 

 

 

 

 


 

오답 문제 3

 

양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n이하의 짝수인 모든 양의 정수의 제곱의 합을 return하는 solution 함수를 작성해 주세요.

 

 

나의 오답 답안

def solution(n):
    list = []
    
    for i in range(0, n+1):
        if i % 2 == 1:
            list.append(i)
        return sum(list)
    
            
        else:
            list.append(i**2)
        return sum(list)

 

일단 생각나는대로 작성한 것. n 이하의 홀수이든, 짝수이든 그 수들을 담을 리스트를 생성해주어야 할 것이기에 빈 리스트를 생성해 주었다. 그리고 홀수와 짝수일 때의 경우를 나누어야 하기 때문에 조건문을 사용하였다. 그리고 최종적으로 각 조건이 맞았을 때 수를 append하여 리스트에 집어넣고 마지막에 sum을 사용해서 합해주는 방법이 옳다고 생각했으나....

 

 

작성된 코드 자체는 개판이 맞다. 분명 for loop를 이용하는 것도 맞지만 배치가 문제인가...?

 

claude에게 내 아이디어를 그대로 물어봤더니 코드를 수정해주었다.

def solution(n):
    list = []
    
    if n % 2 == 1:  # n이 홀수인 경우
        for i in range(1, n+1):
            if i % 2 == 1:  # 홀수 찾기
                list.append(i)
    else:  # n이 짝수인 경우  
        for i in range(2, n+1):
            if i % 2 == 0:  # 짝수 찾기
                list.append(i**2)  # 제곱해서 저장
    
    return sum(list)

 

for loop 안에 조건문이 안이라 각 조건문 안에 for loop를 넣어주어야 하는 것임을 알았다.

 

 

 

다른 사람의 매력적인 풀이

def solution(n):
    answer = 0
    if n%2:
        for i in range(1,n+1,2):
            answer += i
    else:
        for i in range(2,n+1,2):
            answer += i**2
    return answer

+= 연산자를 사용하는 것이 정석이지 않을까 생각한다. += 연산자를 떠올리지 못했던 나

 

 

def solution(n):
    if n%2:
        return sum(range(1,n+1,2))
    return sum([i*i for i in range(2,n+1,2)])

이 코드를 보고 이 코드 작성자는 천재인가 싶었다. range에 할당된 수 자체를 sum할 아이디어에 감탄했다.