본문 바로가기
  • think together
카테부 4기 판교 ai 실무/코테 공부

카테부 4기 판교 ai 실무프로그래머스 코딩 기초 트레이닝 Day23

by hwamgai 2026. 6. 17.

문제: 부분 문자열

https://school.programmers.co.kr/learn/courses/30/lessons/181842

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

def solution(str1, str2):
    if str1 in str2: return 1
    else: return 0

좋은 코드:

def solution(str1, str2):
    return int(str1 in str2)
def solution(str1, str2):
    return 1 if str1 in str2 else 0
def solution(str1, str2):
    return [0,1][str1 in str2]

 

 

 

 

문제: 꼬리 문자열

https://school.programmers.co.kr/learn/courses/30/lessons/181841

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

def solution(str_list, ex):
    answer = ''
    for i in range(len(str_list)):
        if ex not in str_list[i]:
            answer += str_list[i]
    return answer

좋은 코드:

def solution(str_list, ex):
    return ''.join(filter(lambda x: ex not in x, str_list))
def solution(str_list, ex):
    return ''.join([i for i in str_list if ex not in i])
def solution(str_list, ex):
    filtered_list = [s for s in str_list if ex not in s]
    return "".join(filtered_list)

 

 

 

 

 

 

문제: 정수 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/181840

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

def solution(num_list, n):
    if n in num_list: return 1
    else: return 0

좋은 코드:

def solution(num_list, n):
    return int(n in num_list)
def solution(num_list, n):
    return 1 if n in num_list else 0

 

 

 

 

 

문제: 주사위 게임

https://school.programmers.co.kr/learn/courses/30/lessons/181839

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

if a % 2 == 0 & b % 2 == 0:
&가 ==보다 우선순위가 높기 때문에 파이썬은 이 식을 다음과 같이 괄호가 묶인 것처럼 해석합니다.
if a % 2 == (0 & b % 2) == 0:
def solution(a, b):
    
    if a%2==0 and b%2==0:
        return abs(a-b)
    elif a%2!=0 and b%2 != 0:
        return a**2 + b**2
    else:
        return 2*(a+b)

좋은 코드:

def solution(a, b):
        return a*a+b*b if a & b & 1 else (a + b) << 1 if (a | b) & 1 else abs(a - b)

 

 

 

 

 

 

문제: 날짜 비교하기

https://school.programmers.co.kr/learn/courses/30/lessons/181838

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

🚨 논리적 오류가 발생하는 이유 만약 다음과 같은 데이터가 들어왔다고 가정해 볼게요.
date1 = [2026, 05, 10] (2026년 5월 10일)
date2 = [2025, 12, 31] (2025년 12월 31일)
우리가 보기에 date1은 2026년이고 date2는 2025년이므로, date1이 더 미래의 날짜(앞서지 않는 날짜)입니다. 따라서 0이 반환되어야 정상입니다.
하지만 작성하신 코드의 흐름을 따라가면 이렇게 됩니다.
if date1[0] < date2[0]: 2026 < 2025는 거짓(False)이므로 다음 elif로 넘어갑니다.
elif date1[1] < date2[1]: 5 < 12는 참(True)입니다!
여기서 바로 return 1이 실행되어 버립니다.
즉, 연도가 더 뒤(미래)인데도 불구하고, 단순히 '월'이나 '일' 숫자가 더 작다는 이유만으로 앞선 날짜라고 잘못 판단하게 됩니다.
def solution(date1, date2):
    if date1[0] < date2[0]:
        return 1
    elif date1[1] < date2[1]:
        return 1
    elif date1[2] < date2[2]:
        return 1
    else:  
        return 0

 

고친코드:

힌트 2 (파이썬 꿀팁): 파이썬에서는 리스트(List)나 튜플(Tuple)끼리도 크기 비교(<, >)가 가능합니다. 파이썬은 리스트를 비교할 때 자동으로 앞의 원소부터 차례대로 비교해 줍니다. (예: [2021, 12, 28] < [2021, 12, 29])
def solution(date1, date2):
    if date1 < date2: return 1
    else: return 0

 

좋은 코드:

def solution(date1, date2):
    return int(date1 < date2)
def solution(date1, date2):
    for i in range(3):
        if date1[i]<date2[i]:return 1
        elif date2[i]<date1[i]: return 0
    return 0
def solution(date1, date2):
    answer = 0
    a=int(str(date1[0])+str(date1[1])+str(date1[2]))
    b=int(str(date2[0])+str(date2[1])+str(date2[2]))
    if a<b:
        answer+=1
    else:
        answer+=0
    return answer