문제 : 조건에 맞게 수열 변환하기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
'카테부 4기 판교 ai 실무 > 코테 공부' 카테고리의 다른 글
| 카테부 4기 판교 ai 실무프로그래머스 코딩 기초 트레이닝 Day17 (0) | 2026.06.10 |
|---|---|
| 카테부 4기 판교 ai 실무프로그래머스 코딩 기초 트레이닝 Day16 (0) | 2026.06.09 |
| 프로그래머스 코딩 기초 트레이닝 Day14 (0) | 2026.06.07 |
| 프로그래머스 코딩 기초 트레이닝 Day13 (0) | 2026.06.06 |
| 프로그래머스 코딩 기초 트레이닝 Day12 (0) | 2026.06.05 |