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

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

by hwamgai 2026. 6. 8.

문제 : 조건에 맞게 수열 변환하기1

https://school.programmers.co.kr/learn/courses/30/lessons/181882?language=python3

 

프로그래머스

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

programmers.co.kr

 

내 코드:

def solution(arr):
    answer = arr
    for i in range(len(arr)):
        if arr[i] >= 50 and arr[i]%2==0:
            answer[i] /= 2
        elif arr[i] < 50 and arr[i]%2==1:
            answer[i] *= 2
    return answer

좋은코드:

def solution(arr):
    answer = []
    for i in arr:
        if i>=50 and i %2==0: # i >= 50 and not i % 2:
            answer.append(i/2)
        elif i<50 and i %2!=0: 
            answer.append(i*2)
        else:
            answer.append(i)
    return answer

 

 

 

 

 

문제 : 조건에 맞게 수열 변환하기2

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

 

프로그래머스

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

programmers.co.kr

 

내 코드:

https://gemini.google.com/share/88e4e90f41ae

 

‎Gemini - 프로그래머스 조건에 맞게 수열 변환하기2

Gemini로 생성됨

gemini.google.com

def solution(arr):
    result = arr[:]
    answer = 0
    count = 0

    while True:
        
        arr = result[:]
        count += 1
        
        for i in range(len(result)):
            if result[i] >= 50 and result[i]%2 == 0:
                result[i] = int(result[i]/2)
            elif result[i] < 50 and result[i]%2 == 1:
                result[i] = int(result[i]*2 +1)
            
        if result == arr:
            answer = count
            break
            
    return answer-1

 

좋은 코드 :

def solution(arr):
    answer = 0
    while True:
        # 1. 이번 회차의 변환 결과를 담을 새로운 리스트를 만듭니다.
        arr_trans = []
        for i in arr:
            if i >= 50 and i % 2 == 0:
                arr_trans.append(i // 2)
            elif i < 50 and i % 2 == 1:
                arr_trans.append(i * 2 + 1)
            else:
                arr_trans.append(i)
        
        # 2. 직전 배열(arr)과 변환 후 배열(arr_trans)이 같다면 바로 정답 반환!
        if arr == arr_trans:
            return answer
        
        # 3. 다르다면 반복 횟수를 1 늘리고, 다음 비교를 위해 arr를 업데이트합니다.
        answer += 1
        arr = arr_trans

 

 

 

 

 

 

문제: 1로 만들기

http://school.programmers.co.kr/learn/courses/30/lessons/181880

 

프로그래머스

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

programmers.co.kr

 

내코드 : 

- while 에서 '=='으로 썻다가 반복문이 안돌았다 주의하기!

def solution(num_list):
    answer = 0
    
    for i in range(len(num_list)):
        result = 0
        value = num_list[i]
        
        while value != 1:
            if value%2 == 0:
                value = value/2
                result += 1
            else:
                value = (value-1)/2
                result += 1
        answer += result
                
    return answer

 

좋은코드:

def solution(num_list):
    return sum(len(bin(i)) - 3 for i in num_list)
def solution(num_list):
    answer = 0

    for n in num_list:
        while n != 1:
            n //= 2
            answer += 1

    return answer
def solution(num_list):
    answer = 0
    for n in num_list:
        while n!=1:
            answer+=1
            if n%2: n=(n-1)//2
            else: n//=2
    return answer

 

 

 

 

문제: 길이에 따른 연산

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

 

프로그래머스

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

programmers.co.kr

내 코드 :

- 파이썬에서 리스트 요소의 곱 ==> for num in my_list: total *= num

def solution(num_list):
    answer = 0
    
    if len(num_list) >= 11:
        answer = sum(num_list)
    else:
        answer = 1
        for i in num_list:
            answer *= i
    return answer

좋은 코드:

from math import prod
def solution(num_list):
    return sum(num_list) if len(num_list)>=11 else prod(num_list)
def solution(num_list):
    if len(num_list) >= 11:
        return eval('+'.join(list(map(str, num_list))))
    else:
        return eval('*'.join(list(map(str, num_list))))

 

 

 

 

문제 : 원하는 문자열 찾기

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

 

코딩테스트 연습 - 원하는 문자열 찾기

알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려

school.programmers.co.kr

내 코드 : 

- 특정 문자열에서 해당 문자열 찾기 : "pp" in "apple"  # 결과는 True(참)가 됩니다.

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

 

좋은 코드:

def solution(myString, pat):
    return int(pat.lower() in myString.lower())
def solution(myString, pat):
    return min(1, myString.lower().find(pat.lower()) + 1)
    
    

#1. myString.lower().find(pat.lower())
대소문자를 구분하지 않기 위해 두 문자열을 모두 .lower()로 소문자 변환했습니다. 그 후 find() 메서드를 사용해 위치를 찾습니다.

파이썬의 find()는 문자열을 찾으면 시작하는 인덱스 번호(0 이상의 정수)를 반환하고, 찾지 못하면 -1을 반환합니다.

문자열을 찾은 경우: 0, 1, 2, 3, ... 중 하나를 반환

문자열을 찾지 못한 경우: -1을 반환

#2. 뒤에 + 1을 더해주는 이유
find()의 결과에 1을 더함으로써 결과값을 다음과 같이 시프트(이동)시킵니다.

문자열을 찾은 경우: 최소 0이었던 인덱스가 + 1이 되면서 1, 2, 3, 4, ... (1 이상의 양수)가 됩니다.

문자열을 찾지 못한 경우: -1이었던 값이 + 1이 되면서 정확히 0이 됩니다.

💡 여기서 주목! 찾지 못했을 때의 결과인 0은 우리가 최종적으로 원하는 정답과 일치하게 됩니다.

#3. min(1, ...)으로 상한선 마지노선 정하기
이제 마지막 관문입니다. 문자열을 찾았을 때 1, 2, 3... 처럼 커진 숫자들을 문제 요구사항에 맞게 무조건 1로 고정시켜야 합니다. 이때 min() 함수가 활약합니다.

min(A, B)는 A와 B 중 더 작은 값을 고르는 함수입니다.

문자열을 찾았을 때 (+1 결과가 1 이상의 양수일 때):
예를 들어 결과가 3이라면, min(1, 3)이 되므로 더 작은 값인 1이 선택됩니다. (어떤 큰 인덱스가 나와도 무조건 1이 됩니다.)

문자열을 찾지 못했을 때 (+1 결과가 0일 때):
min(1, 0)이 되므로 더 작은 값인 0이 선택됩니다.

요약하자면
문자열이 있으면: find()가 0 이상 ➡️ +1 하면 1 이상 ➡️ min(1, 1 이상)의 결과는 1

문자열이 없으면: find()가 -1 ➡️ +1 하면 0 ➡️ min(1, 0)의 결과는 0

일반적으로 if ... in ... 구조를 사용해 풀 수 있는 문제지만, find()의 반환값 규칙과 수학적 비교를 활용해 단 한 줄로 조건문 없이 풀어낸 섹시하고 효율적인 코드입니다!
def solution(myString, pat):
    return 1 if pat.lower() in myString.lower() else 0

https://gemini.google.com/share/cc4fb406adf8

 

‎Gemini - 프로그래머스 원하는 문자열 찾기

Gemini로 생성됨

gemini.google.com