동아리나 학부 수업 실습 덕분에 백준 알고리즘과는 친했지만 프로그래머스는 처음이었다. 그래서 사이트와 친해지기 위해 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할 아이디어에 감탄했다.
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!