코드 처리하기
문제설명
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
- mode가 0일 때
- code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
- mode가 1일 때
- code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
def solution(code):
mode = 0
ret = ""
for idx in range(len(code)):
if mode == 0:
if code[idx] == '1':
mode = 1
else:
if idx % 2 == 0:
ret += code[idx]
else:
if code[idx] == '1':
mode = 0
else:
if idx % 2 != 0:
ret += code[idx]
return "EMPTY" if ret == "" else ret
[Python] 프로그래머스 트레이닝 챌린지 D4
등차수열의 특정한 항만 더하기
문제설명
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
def solution(a, d, included):
answer = 0
for i in range(len(included)):
if included[i] == True: #i 번째에 있는 애가 boolean=True 일 때
term = a + i * d #등차수열의 합을 적용한상태
answer += term # True 인 애들만 더함
return answer
주사위게임 2
문제설명
1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
- 세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
- 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
- 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
def solution(a, b, c):
if a!=b and b!=c and a!=c:
return a+b+c
elif a==b or b==c or c==a:
if a==b and b==c:
return (a+b+c)*(a**2+b**2+c**2)*(a**3+b**3+c**3)
else:
return (a+b+c)*(a**2+b**2+c**2)
원소들의 곱과 합
문제설명
정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.
첫번째 시도
def solution(num_list):
total=1
answer=1
for i in range(num_list):
answer*=i #모든 원소들의 곱
total+=i
if answer < total:
return 1
else:
return 0
두번째 시도
def solution(num_list):
total= 1 # 원소들의 곱
num = 0 # 원소들의 합
for i in num_list:
total*=i
num+=i
if total < num**2:
return 1
else:
return 0
해결
def solution(num_list):
total= 1 # 원소들의 곱
num = 0 # 원소들의 합
for i in num_list:
total*=i
num+=i
if total < num**2:
return 1
else:
return 0
이어붙인 수
문제설명
정수가 담긴 리스트 num_list가 주어집니다. num_list의 홀수만 순서대로 이어 붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.
첫번째 시도
def solution(num_list):
odd=[]
even=[]
answer=[]
for i in num_list:
if i%2==0:
even.append(i)
else:
odd.append(i)
answer= zip(odd,even)
return sum(answer)
문제점
1. 부적절한 answer 리스트 초기화
2. zip 사용의 부적절함
😭 아직도 zip 을 헷갈리나??
zip 함수는 여러 iterable(리스트, 튜플 등)의 요소들을 병렬로 묶어서 튜플의 형태로 반환하는 함수.
zip 함수를 사용하면 각 iterable의 같은 인덱스에 위치한 요소들을 하나의 튜플로 묶어 새로운 iterable을 생성
-> 병렬로 처리해야 할 일이 있을 때 zip 을 주로 사용한다#예시 list1 = ['1', '3', '5'] list2 = ['2', '4', '6']
zipped = zip(list1, list2) print(zipped) #>> <zip object at 0x7c813c9aa380> # 타입만 나와버림
zipped=zip(list1,list2) print(*zipped) #>>>('1', '2') ('3', '4') ('5', '6') list(zip(list1,list2)) #>>>[('1', '2'), ('3', '4'), ('5', '6')]
# 각 튜플의 요소를 이어붙이기 result = [a + b for a, b in zipped] print(result) #>>>['12', '34', '56']
이런 식으로 병렬로 처리하여 각 요소들을 처리해야 할 일이 있을 때 zip 을 주로 사용하게 된다.
join 정확히 알기
odd.join('') 과 odd_str =''.join(odd) 의 차이점:
앞에처럼 odd.join('') 을 해버리면 odd 라는 리스트 자체에 join 을 걸어버리는 거라서
list에 join 을 걸 수 없음-> 오류남
그런데 ' '.join(odd) 를 해버리면 odd 안의 요소 하나하나에 Join 을 거는 거라서 list 안의 literable 한 객체들에 거는 거라서
괜찮은 것이다.
해결
def solution(num_list):
odd = []
even = []
for i in num_list:
if i % 2 == 0:
even.append(str(i))
else:
odd.append(str(i))
odd_number = int(''.join(odd))
even_number = int(''.join(even))
return odd_number + even_number
숫자를 이어붙인다 라는 말이 나오면 문자형으로 바꾸기
정수형 타입이면 그냥 더해버릴 수 있기 때문에 문자형으로 바꿔야만 붙여질 수 있다.
따라서 다시 해결한 방법..
- 짝수와 홀수를 따로 저장하기 위해 각각의 빈 배열 만들어주기
- 짝수와 홀수 구분하여 빈 배열 안에 넣어주기
- 이때 이어붙이기 위하여 문자열 형태로 넣어줌
- 이어붙인 수들을 더해주기 위하여 다시 문자열 형태로 odd_number에 넣어줌
- 이렇게 하면 이어붙인 수들이 하나씩 저장이 됨
- 두 수를 더해줌
'Algorithm' 카테고리의 다른 글
[Python] 프로그래머스 트레이닝 챌린지 D7 (2) | 2024.07.23 |
---|---|
[Python] 프로그래머스 트레이닝 챌린지 D6 (7) | 2024.07.22 |
[Python] 프로그래머스 트레이닝 챌린지 D4 (0) | 2024.07.18 |
[Python] 프로그래머스 트레이닝 챌린지 D3 (0) | 2024.07.17 |
[Python] 프로그래머스 트레이닝 챌린지 D2 (0) | 2024.07.16 |