👉 사용 언어 : PYTHON3
삼총사
✅ Solution
from itertools import combinations
def solution(number):
cnt = 0
number_combi = list(combinations(number, 3))
for i in range(len(number_combi)):
if sum(number_combi[i]) == 0:
cnt += 1
return cnt
✅ 파이썬에서의 순열(Permutations)과 조합(Combinations)
👉 순열(Permutations)
from itertools import combinations, permutations
nums = [1,2,3,4]
perm = list(combinations(nums, 2))
: [(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)] 출력
👉 조합(Combinations)
from itertools import combinations, permutations
nums = [1,2,3,4]
combi = list(combinations(nums, 2))
: [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] 출력
✅ sum(iterable)
👉 iterable 의 합 출력
✅ sum(iterable, start)
👉 iterable 합과 start 더한값 출력
? iterable : 리스트 / 튜플 / 딕셔너리 - ?
? 주의 iterable 안에 숫자가 아닌 객체가 존재하면 TypeError 발생 ?
숫자 문자열과 영단어
✅ Solution
def solution(s):
info = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
key_list = list(info.keys())
for key in key_list:
s = s.replace(key, str(info[key]))
return int(s)
✅ 딕셔너리 key - value 특성 및 replace 함수 사용하여 풀이함.
👉 딕셔너리 Key - Value
- 딕셔너리 생성 : dictionary = { 키:값, 키:값, ... }
- 키 : boolean / 정수 / 실수 / 자료형 - 모두 가능 ( 수정 가능한 데이터 타입의 키 생성 _ "TypeError" )
- 키는 중복 불가능
👉 딕셔너리 관련 함수
- 키-값 개수 확인 : len(딕셔너리명)
- 해당 딕셔너리의 모든 키-값 보기 : 딕셔너리명.items( ) _ 키-값을 포함하는 튜플 목록을 반환
- 모든 키 보기 : 딕셔너리명.keys( ) _ dict.keys([]) 반환
- 모든 값 보기 : 딕셔너리명.values( ) _ dict.values([]) 반환
- 특정 키로 해당하는 값에 접근하기 : 딕셔너리명[특정 키 ] _ 키가 존재하지 않는다? "KeyError"
- 특정 키가 딕셔너리에 존재하는지 확인 : 특정 키 in 딕셔너리 _ true/false 반환
- KeyError 방지하는 또 다른 방법 : 딕셔너리명.get(특정 키) _ 있으면 해당값 / 없으면 None 반환
- 새로운 키-값 추가하기 : 딕셔너리명[키] = 값
- 추가하려는 키가 이미 딕셔너리에 존재하는 경우, 새로운 키-값이 추가되지 않고 기존 키에 해당하는 값만 바뀜
- 특정 키-값 삭제하기 : del 딕셔너리명[특정 키] 또는 딕셔너리명.pop(특정 키) _ pop()은 삭제한 값 반환
- 딕셔너리의 마지막 키-값 삭제하기 : 딕셔너리명.popitem( )
👉 replace( )
str.replace(old_str, new_str[, optional_max])
- 문자열.replace(str1, str2) : 문자열 내 str1을 str2로 대체
- 문자열.replace(str1, str2, num) : 문자열 내 str1을 num개만 str2로 대체
? 주의 ? str.replace( )을 따로 저장하려면 결과값을 다른 문자열 변수에 저장해야함
( str.replace( ) 해도 str 출력하면 결과가 반영되지 X )
✅ 다른 사람 풀이 참고
num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}
def solution(s):
answer = s
for key, value in num_dic.items():
answer = answer.replace(key, value)
return int(answer)
K 번째 수
✅ Solution
def solution(array, commands):
answer = []
for i in commands:
res_list = sorted(array[i[0]-1:i[1]])
answer.append(res_list[i[2]-1])
return answer
✅ 리스트의 슬라이싱 사용하여 풀이함.
👉 리스트 슬라이싱
- 리스트명[시작index : 끝index] : 끝index-1까지만 포함되므로 주의해야한다.
👉 해당 문제 풀이에서는 리스트의 인덱스 범위를 주의해서 확인해야 한다.
✅ 다른 사람 풀이 참고
def solution(array, commands):
return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))
콜라 문제
✅ Solution
def solution(a, b, n):
answer = 0
while n >= a:
answer += (n//a)*b
n = n - a*(n//a) + (n//a)*b
return answer
👉 단순 산수 문제(?)
✅ 다른 사람 풀이 참고
solution = lambda a, b, n: max(n - b, 0) // (a - b) * b
하샤드 수
✅ Solution
def solution(x):
res = 0
x_rep = x
while x >= 10:
res += x%10
x = x//10
res += x
return x_rep%res == 0
👉 이것도 산수..(?)
✅ 다른 사람 풀이 참고
def Harshad(n):
return n%sum(int(x) for x in str(n)) == 0
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(Harshad(18))
👉 정수를 문자열로 표현해서 하나씩 뽑아서 다시 정수화 한 후, 더하는 방법 사용 (천재다)
3진법 뒤집기
✅ Solution
def solution(n):
th_list = []
while n > 0:
n, r = divmod(n, 3)
th_list.append(r)
return int(''.join(map(str,th_list)), 3)
👉 reverse( ) 및 n진수 사용하여 풀이함.
👉 앗 어차피 뒤집어진 3진법을 구하므로 reverse( ) 사용할 필요없이 순서대로 리스트에 담으면 됨!
✅ 리스트명.reverse( )
: 리스트 원소 순서를 거꾸로 뒤집어준다.
- 리스트 타입에 사용 가능
- 반환값 없이 자기자신을 변경
✅ reversed( )
: 리스트 원소 순서를 거꾸로 뒤집어준다.
- reversed object 생성 _ 뒤집은 리스트를 다시 사용하려면 다른 변수에 저장해야한다.
- 리스트, 튜플, 딕셔너리, 스트링에도 사용 가능
✅ 슬라이싱[::-1]
: 객체 전체를 반대로 뒤집어준다.
✅ n진수 → 10진수
: int(string, base)
: base에 진법(n)을 넣어주면 된다.
✅ 10진수 → 2, 8, 16진수
: int(string, base)
- 2진수 : bin( )
- 8진수 : oct( )
- 16진수 : hex( )
: 0b는 2진수, 0o는 8진수, 0x는 16진수를 의미한다. 앞의 진법 표시를 지울려면 [2:]를 해준다.
✅ divmod( )
: divmod(a, b)
: a를 b로 나눈 몫과 나머지 모두 반환
✅ map( )
: map(int 또는 str, 리스트명)
: 해당 리스트 원소를 int ↔️ str 변환
✅ join( )
: ''.join(리스트명) 또는 '구분자'.join(리스트명)
: 리스트([]) → 문자열("~")로 변환
: 후자의 경우, 문자열로 합쳐질때 각 원소 사이에 구분자가 추가된다.
✅ 다른 사람 풀이 참고
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
같은 숫자는 싫어
✅ Solution
def solution(arr):
answer = [arr[0]]
for i in range(1, len(arr)):
if arr[i] != arr[i-1]:
answer.append(arr[i])
return answer
👉 반복문과 인덱스 사용해서 풀이함. (생각보다 너무 빨리 풀려서 당황.. 단순하게 생각해야한다)
✅ 다른 사람 풀이 참고
def no_continuous(s):
# 함수를 완성하세요
a = []
for i in s:
if a[-1:] == [i]: continue
a.append(i)
return a
추억점수
✅ Solution
def solution(name, yearning, photo):
answer = []
dict = {}
for i in range(len(name)):
dict[name[i]] = yearning[i]
for j in photo:
y_sum = 0
for k in j:
if k in dict:
y_sum += dict[k]
answer.append(y_sum)
return answer
👉 딕셔너리 사용해서 풀이함. (위의 딕셔너리 관련 함수 및 설명 참고)
✅ 다른 사람 풀이 참고
def solution(이름, 점수, 사진):
return [sum(점수[이름.index(j)] for j in i if j in 이름) for i in 사진]
👉 어떻게 한줄...? 더 분발하자 🥲
'알고리즘풀이 > 프로그래머스' 카테고리의 다른 글
| [11/16] Lv1. (0) | 2023.11.10 |
|---|---|
| [11/8] Lv1. (0) | 2023.11.04 |
| [10/31] Lv1. (0) | 2023.11.01 |
| [9/30] Lv1. (0) | 2023.09.27 |
| [9/21] Lv1. (0) | 2023.09.15 |