프로그래머스 코딩 기초 트레이닝 Lv.0 124문제 파이썬 풀이
파이썬 입문자인 저의 풀이와 본받을 코드를 모아서 복습하는 글입니다.
프로그래머스 코딩 기초 트레이닝 Lv.0 124문제
https://school.programmers.co.kr/learn/challenges/training?order=recent&page=1
문자열 연산, 배열, 조건문, 반복문 등 기본적인 파이썬 문법을 익힐 수 있는 문제들입니다.
정답률 높은 순으로 풀면 성취감 느끼며 기본을 다질 수 있습니다.
출력 문제 풀이
문자열 출력하기
str = input()
print(str)
a와 b 출력하기
a, b = map(str, input().strip().split(' '))
print('a = ' + a)
print('b = ' + b)
a, b = map(str, input().strip().split(' '))
print('a =', a)
print('b =', b)
문자열 반복해서 출력하기
a, b = input().strip().split(' ')
for _ in range(int(b)):
print(a, end='')
a, b = input().strip().split(' ')
b = int(b)
result = a * b
print(result)
대소문자 바꿔서 출력하기
str = input()
list = list(str)
result = ""
for v in list:
if v.islower():
result += v.upper()
else:
result += v.lower()
print(result)
print(input().swapcase())
특수문자 출력하기
print("!@#$%^&*(\\'\"<>?:;")
print(r'!@#$%^&*(\'"<>?:;')
덧셈식 출력하기
a, b = map(int, input().strip().split(' '))
print(a, '+', b, '=', a + b)
a, b = map(int, input().strip().split(' '))
print(f"{a} + {b} = {a + b}")
문자열 붙여서 출력하기
str1, str2 = input().strip().split(' ')
print(f"{str1}{str2}")
print(input().strip().replace(' ', ''))
문자열 돌리기
str = input()
for v in str:
print(v)
홀짝 구분하기
a = int(input())
if a % 2 == 0:
print(a, 'is even')
else:
print(a, 'is odd')
연산 문제 풀이
문자열 겹쳐쓰기
def solution(my_string, overwrite_string, s):
answer = ''
my_string_list = list(my_string)
for i in range(len(overwrite_string)):
my_string_list[s + i] = overwrite_string[i]
for v in my_string_list:
answer += v
return answer
def solution(my_string, overwrite_string, s):
return my_string[:s] + overwrite_string + my_string[s + len(overwrite_string):]
문자열 섞기
def solution(str1, str2):
answer = ''
str1_i, str2_i = 0, 0
for i in range(len(str1)+len(str2)):
if(i % 2 == 0):
answer += str1[str1_i]
str1_i += 1
else:
answer += str2[str2_i]
str2_i += 1
return answer
def solution(str1, str2):
answer = ''
for i in range(0, len(str1)):
answer = answer + str1[i] + str2[i]
return answer
문자 리스트를 문자열로 변환하기
def solution(arr):
answer = ''
for v in arr:
answer += v
return answer
def solution(arr):
return ''.join(arr)
문자열 곱하기
def solution(my_string, k):
answer = ''
for i in range(k):
answer += my_string
return answer
def solution(my_string, k):
return my_string * k
더 크게 합치기
def solution(a, b):
str_a = str(a)
str_b = str(b)
str_a_and_b = int(str_a + str_b)
str_b_and_a = int(str_b + str_a)
if str_a_and_b > str_b_and_a:
return str_a_and_b
else:
return str_b_and_a
def solution(a, b):
return int(max(f"{a}{b}", f"{b}{a}"))
두 수의 연산값 비교하기
def solution(a, b):
return max(int(f"{a}{b}"), 2*a*b)
n의 배수
def solution(num, n):
if num % n == 0:
return 1
else:
return 0
def solution(num, n):
return int(not(num % n))
공배수
def solution(number, n, m):
if number % n == 0 and number % m == 0:
return 1
else:
return 0
파이썬에서 &는 비트연산자이므로 and를 사용해야 합니다.
조건문 문제 풀이
홀짝에 따라 다른 값 반환하기
def solution(n):
answer = 0
if n % 2 == 1:
for i in range(1, n+1):
if i % 2 == 1:
answer += i
if n % 2 == 0:
for i in range(1, n+1):
if i % 2 == 0:
answer += i * i
return answer
조건 문자열
def solution(ineq, eq, n, m):
answer = 0
if eq == "=":
ineq += eq
if ineq == ">=":
if n >= m:
return 1
else:
return 0
elif ineq == "<=":
if n <= m:
return 1
else:
return 0
elif ineq == ">":
if n > m:
return 1
else:
return 0
elif ineq == "<":
if n < m:
return 1
else:
return 0
return answer
def solution(ineq, eq, n, m):
return int(eval(str(n) + ineq + eq.replace("!", "") + str(m)))
flag에 따라 다른 값 반환하기
def solution(a, b, flag):
if flag:
return a + b
else:
return a - b
코드 처리하기
def solution(code):
ret = ""
mode = 0
for i, v in enumerate(code):
if mode == 0:
if v == "1":
mode = 1
elif i % 2 == 0:
ret += v
else:
if v == "1":
mode = 0
elif i % 2 == 1:
ret += v
return ret or "EMPTY"
def solution(code):
return "".join(code.split("1"))[::2] or "EMPTY"
등차수열의 특정한 항만 더하기
def solution(a, d, included):
arr = [v for v in range(a, a+len(included)*d, d)]
return sum(arr[i] for i, v in enumerate(included) if v == True)
주사위 게임 2
def solution(a, b, c):
if a == b and b == c:
return (a + b + c) * (a**2 + b**2 + c**2 ) * (a**3 + b**3 + c**3 )
elif a == b or b == c or c == a:
return (a + b + c) * (a**2 + b**2 + c**2 )
else:
return a + b + c
def solution(a, b, c):
sameDel = len(set([a, b, c]))
if sameDel == 1:
return (a + b + c) * (a**2 + b**2 + c**2 ) * (a**3 + b**3 + c**3 )
elif sameDel == 2:
return (a + b + c) * (a**2 + b**2 + c**2 )
else:
return a + b + c
원소들의 곱과 합
def solution(num_list):
gop = 1
hap = 0
for v in num_list:
gop *= v
hap += v
return int(gop < (hap * hap))
def solution(num_list):
gop = eval("*".join(str(x) for x in num_list))
hap_2 = sum(num_list)**2
return int(gop < hap_2)
이어 붙인 수
def solution(num_list):
odd = ""
even = ""
for v in num_list:
if v % 2 == 1:
odd += str(v)
else:
even += str(v)
return int(odd) + int(even)
마지막 두 원소
def solution(num_list):
last_pre, last = num_list[-2:]
if last > last_pre:
num_list.append(last - last_pre)
else:
num_list.append(last * 2)
return num_list
def solution(num_list):
num_list.append(num_list[-1] - num_list[-2] if num_list[-1] > num_list[-2] else num_list[-1] * 2)
return num_list
수 조작하기 1
def solution(n, control):
for v in control:
if "w" == v:
n += 1
elif "s" == v:
n -= 1
elif "d" == v:
n += 10
elif "a" == v:
n -= 10
return n
def solution(n, control):
addNum = dict(zip(["w", "s", "d", "a"], [1, -1, 10, -10]))
return n + sum(addNum[v] for v in control)
수 조작하기 2
def solution(numLog):
answer = ""
for i in range(0, len(numLog)-1):
v = numLog[i+1] - numLog[i]
while v != 0:
if v >= 10:
v = v - 10
answer += "d"
elif v >= 1:
v = v - 1
answer += "w"
elif v <= -10:
v = v + 10
answer += "a"
elif v <= -1:
v = v + 1
answer += "s"
return answer
def solution(numLog):
answer = ""
moveDict = {1:"w", -1:"s", 10:"d", -10:"a"}
for i in range(1, len(numLog)):
answer += moveDict[numLog[i] - numLog[i-1]]
return answer
간단한 논리 연산
def solution(x1, x2, x3, x4):
return (x1 or x2) and (x3 or x4)
주사위 게임 3
def solution(a, b, c, d):
nums = [a, b, c, d]
counts = [nums.count(i) for i in nums]
if max(counts) == 4:
return a * 1111
elif max(counts) == 3:
p = nums[counts.index(3)]
q = nums[counts.index(1)]
return (10 * p + q) ** 2
elif max(counts) == 2:
if min(counts) == 2:
return (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b)
else:
p = nums[counts.index(2)]
return (a * b * c * d) / p**2
else:
return min(nums)
이 문제는 아직 풀지 못해서 풀이 메모해두고 다시 볼 예정입니다.
배열의 원소 삭제하기
def solution(arr, delete_list):
for v in delete_list:
if v in arr:
arr.remove(v)
return arr
def solution(arr, delete_list):
return [v for v in arr if v not in delete_list]
부분 문자열인지 확인하기
def solution(my_string, target):
return int(target in my_string)
부분 문자열
def solution(str1, str2):
return int(str1 in str2)
꼬리 문자열
def solution(str_list, ex):
return "".join(v for v in str_list if ex not in v)
정수 찾기
def solution(num_list, n):
return int(n in num_list)
주사위 게임 1
def solution(a, b):
if a % 2 == 1 and b % 2 == 1:
return (a * a) + (b * b)
elif a % 2 == 1 or b % 2 == 1:
return 2 * (a + b)
else:
return abs(a - b)
날짜 비교하기
def solution(date1, date2):
dateInt1 = int("".join(map(str, date1)))
dateInt2 = int("".join(map(str, date2)))
return int(dateInt1 < dateInt2)
def solution(date1, date2):
return int(date1 < date2)
커피 심부름
def solution(order):
answer = 0
for v in order:
if "cafelatte" in v:
answer += 5000
else:
answer += 4500
return answer
반복문 문제 풀이
수열과 구간 쿼리 3
def solution(arr, queries):
temp = 0
for v in queries:
temp = arr[v[1]]
arr[v[1]] = arr[v[0]]
arr[v[0]] = temp
return arr
def solution(arr, queries):
for i, j in queries:
arr[i], arr[j] = arr[j], arr[i]
return arr
수열과 구간 쿼리 2
def solution(arr, queries):
answer = []
for s, e, k in queries:
k_up = [v for v in arr[s:e+1] if v > k]
if k_up:
answer.append(min(k_up))
else:
answer.append(-1)
return answer
def solution(arr, queries):
answer = []
for s, e, k in queries:
k_up = [v for v in arr[s:e+1] if v > k]
answer.append(-1 if not k_up else min(k_up))
return answer
수열과 구간 쿼리 4
def solution(arr, queries):
for v in queries:
for i in range(v[0], v[1]+1):
if i % v[2] == 0:
arr[i] += 1
return arr
def solution(arr, queries):
for s, e, k in queries:
for i in range(s, e+1):
if i % k == 0:
arr[i] += 1
return arr
배열 만들기 2
def solution(l, r):
answer = []
for i in range(l, r+1):
fleg = True
str_v = str(i)
for v in str_v:
if v != "0" and v != "5":
fleg = False
break
if fleg == True:
answer.append(i)
return answer or [-1]
def solution(l, r):
answer = []
for i in range(l, r+1):
if not set(str(i)) - set(['0', '5']):
answer.append(i)
return answer or [-1]
카운트 업
def solution(start_num, end_num):
return list(range(start_num, end_num+1))
콜라츠 수열 만들기
def solution(n):
answer = [n]
while n > 1:
if n % 2 == 0:
n = n / 2
else:
n = 3 * n + 1
answer.append(n)
return answer
배열 만들기 4
def solution(arr):
stk = []
i = 0
while i < len(arr):
if stk and stk[-1] >= arr[i]:
stk.pop()
else:
stk.append(arr[i])
i += 1
return stk
그림 확대
def solution(picture, k):
answer = []
for v in picture:
line = ""
for col_v in v:
line += col_v * k
for _ in range(k):
answer.append(line)
return answer
def solution(picture, k):
answer = []
for i in range(len(picture)):
for _ in range(k):
answer.append(picture[i].replace('.', '.' * k).replace('x', 'x' * k))
return answer
조건에 맞게 수열 변환하기 3
def solution(arr, k):
for i in range(len(arr)):
if k % 2 == 1:
arr[i] = arr[i] * k
else:
arr[i] = arr[i] + k
return arr
def solution(arr, k):
if k % 2 != 0:
return list(map(lambda x: x * k, arr))
return list(map(lambda x: x + k, arr))
l로 만들기
def solution(myString):
myList = list(myString)
for i, v in enumerate(myList):
if v < "l":
myList[i] = "l"
return "".join(myList)
def solution(myString):
return "".join([v if v > "l" else "l" for v in myString])
문자열 문제 풀이
글자 이어 붙여 문자열 만들기
def solution(my_string, index_list):
answer = ""
for v in index_list:
answer += my_string[v]
return answer
def solution(my_string, index_list):
return "".join(my_string[i] for i in index_list)
9로 나눈 나머지
def solution(number):
return sum(int(v) for v in number) % 9
def solution(number):
return sum(list(map(int, number))) % 9
문자열 여러 번 뒤집기
def solution(my_string, queries):
for s, e in queries:
my_string = my_string[:s] + "".join(reversed(my_string[s:e+1])) + my_string[e+1:]
return my_string
def solution(my_string, queries):
my_list = list(my_string)
for s, e in queries:
my_list[s:e+1] = my_list[s:e+1][::-1]
return "".join(my_list)
배열 만들기 5
def solution(intStrs, k, s, l):
answer = []
for v in intStrs:
splitInt = int(v[s:s+l])
if splitInt > k:
answer.append(splitInt)
return answer
부분 문자열 이어 붙여 문자열 만들기
def solution(my_strings, parts):
answer = ""
for i in range(len(my_strings)):
answer += my_strings[i][parts[i][0]:parts[i][1]+1]
return answer
def solution(my_strings, parts):
answer = ""
for i, (s, e) in enumerate(parts):
answer += my_strings[i][s:e+1]
return answer
문자열의 뒤의 n글자
def solution(my_string, n):
str_len = len(my_string)
answer = ""
for i in range(n, 0, -1):
answer += my_string[str_len - i]
return answer
def solution(my_string, n):
return my_string[-n:]
접미사 배열
def solution(my_string):
answer = []
for i in range(len(my_string)):
answer.append(my_string[i:])
answer.sort()
return answer
def solution(my_string):
return sorted(my_string[i:] for i in range(len(my_string)))
접미사인지 확인하기
def solution(my_string, is_suffix):
return int(my_string.endswith(is_suffix))
문자열의 앞의 n글자
def solution(my_string, n):
return my_string[:n]
접두사인지 확인하기
def solution(my_string, is_prefix):
return int(my_string[:len(is_prefix)] == is_prefix)
def solution(my_string, is_prefix):
return int(my_string.startswith(is_prefix))
문자열 뒤집기
def solution(my_string, s, e):
return my_string[:s] + "".join(my_string[i] for i in range(e, s-1, -1)) + my_string[e+1:]
def solution(my_string, s, e):
return my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
세로 읽기
def solution(my_string, m, c):
answer = ''
for i in range(1, int(len(my_string)/m)+1):
answer += my_string[(i-1)*m:i*m][c-1]
return answer
def solution(my_string, m, c):
return my_string[c-1::m]
qr code
def solution(q, r, code):
return code[r::q]
원하는 문자열 찾기
def solution(myString, pat):
return int(pat.lower() in myString.lower())
대문자로 바꾸기
def solution(myString):
return myString.upper()
소문자로 바꾸기
def solution(myString):
return myString.lower()
배열에서 문자열 대소문자 변환하기
def solution(strArr):
for i, v in enumerate(strArr):
if i % 2 == 0:
strArr[i] = v.lower()
else:
strArr[i] = v.upper()
return strArr
A 강조하기
def solution(myString):
myList = list(myString)
for i, v in enumerate(myList):
if v.lower() == "a":
myList[i] = "A"
else:
myList[i] = v.lower()
return "".join(myList)
def solution(myString):
return myString.lower().replace("a", "A")
특정한 문자를 대문자로 바꾸기
def solution(my_string, alp):
return my_string.replace(alp, alp.upper())
특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
def solution(myString, pat):
for i in range(len(myString), len(pat)-1, -1):
if myString[:i][-len(pat):] == pat:
return myString[:i]
문자열이 몇 번 등장하는지 세기
def solution(myString, pat):
answer = 0
for i in range(0, len(myString)-len(pat)+1):
v = myString[i:i+len(pat)]
if v == pat:
answer += 1
return answer
def solution(myString, pat):
answer = 0
for i in range(len(myString)):
if myString[i:].startswith(pat):
answer += 1
return answer
ad 제거하기
def solution(strArr):
for i, v in reversed(list(enumerate(strArr))):
change_v = v.replace("ad", "")
if v != change_v:
strArr.pop(i)
return strArr
def solution(strArr):
return [v for v in strArr if "ad" not in v]
공백으로 구분하기 1
def solution(my_string):
return my_string.split(" ")
공백으로 구분하기 2
def solution(my_string):
my_list = list(my_string.strip().split(" "))
i = 0
result_list = []
for v in my_list:
if v != "":
result_list.append(v)
return result_list
def solution(my_string):
return my_string.split()
x 사이의 개수
def solution(myString):
return [len(v) for v in myString.split("x")]
문자열 잘라서 정렬하기
def solution(myString):
answer = myString.split("x")
for i, v in reversed(list(enumerate(answer))):
if v == "":
answer.pop(i)
return sorted(answer)
def solution(myString):
return sorted(v for v in myString.split("x") if v != "")
간단한 식 계산하기
def solution(binomial):
return eval(binomial)
문자열 바꿔서 찾기
def solution(myString, pat):
new_myString = ""
for v in myString:
if v == "A":
new_myString += "B"
else:
new_myString += "A"
new_myString = new_myString.replace(pat, "*")
for v in new_myString:
if v == "*":
return 1
return 0
def solution(myString, pat):
return int(pat in myString.replace("A", "C").replace("B", "A").replace("C", "B"))
rny_string
def solution(rny_string):
return rny_string.replace("m", "rn")
세 개의 구분자
def solution(myStr):
answer = []
s = 0
for i, v in enumerate(myStr):
if v == "a" or v == "b" or v == "c":
append_v = myStr[s:i]
if append_v != "":
answer.append(append_v)
s = i+1
if len(answer) == 0 and s == len(myStr):
answer.append("EMPTY")
else:
answer.append(myStr[s:])
return answer
배열 문제 풀이
문자 개수 세기
def solution(my_string):
answer = [0]*52
ord_A, ord_Z, ord_a = ord('A'), ord('Z'), ord('a')
for v in my_string:
v_ord = ord(v)
if v_ord >= ord_A and v_ord <= ord_Z:
answer[v_ord - ord_A] += 1
else:
answer[int(52/2) + v_ord - ord_a] += 1
return answer
def solution(my_string):
answer = [0]*52
for v in my_string:
if v.isupper():
answer[ord(v) - ord('A')] += 1
else:
answer[int(52/2) + ord(v) - ord('a')] += 1
return answer
배열 만들기 1
def solution(n, k):
answer = []
for i in range(1, n+1):
if i % k == 0:
answer.append(i)
return answer
def solution(n, k):
return [i for i in range(k, n+1, k)]
글자 지우기
def solution(my_string, indices):
my_list = list(my_string)
indices.sort()
for v in reversed(indices):
my_list.pop(v)
return "".join(my_list)
def solution(my_string, indices):
return "".join(v for i, v in enumerate(my_string) if i not in indices)
카운트 다운
def solution(start, end_num):
list = []
for i in range(start, end_num-1, -1):
list.append(i)
return list
def solution(start, end_num):
return list(range(start, end_num-1, -1))
가까운 1 찾기
def solution(arr, idx):
for i, v in enumerate(arr[idx:]):
if v == 1:
return idx + i
return -1
def solution(arr, idx):
for i in range(idx, len(arr)):
if arr[i] == 1:
return i
return -1
리스트 자르기
def solution(n, slicer, num_list):
a, b, c = slicer
if n == 1:
return num_list[0:b+1]
elif n == 2:
return num_list[a:]
elif n == 3:
return num_list[a:b+1]
elif n == 4:
return num_list[a:b+1:c]
첫 번째로 나오는 음수
def solution(num_list):
for i in range(len(num_list)):
if num_list[i] < 0:
return i
return -1
배열 만들기 3
def solution(arr, intervals):
return arr[intervals[0][0]:intervals[0][1]+1] + arr[intervals[1][0]:intervals[1][1]+1]
def solution(arr, intervals):
s1, e1 = intervals[0]
s2, e2 = intervals[1]
return arr[s1:e1+1] + arr[s2:e2+1]
2의 영역
def solution(arr):
answer = []
s, e = -1, 0
for i, v in enumerate(arr):
if v == 2:
if s == -1:
s = i
e = i
if s != -1:
for i in range(s, e+1):
answer.append(arr[i])
return answer or [-1]
def solution(arr):
if 2 not in arr:
return [-1]
return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
배열 조각하기
def solution(arr, query):
for i, v in enumerate(query):
if i % 2 == 0:
arr = arr[:v+1]
else:
arr = arr[v:]
return arr
n 번째 원소부터
def solution(num_list, n):
return num_list[n-1:]
순서 바꾸기
def solution(num_list, n):
return num_list[n:] + num_list[:n]
왼쪽 오른쪽
def solution(str_list):
for i, v in enumerate(str_list):
if v == 'l':
return str_list[:i]
elif v == 'r':
return str_list[i+1:]
return []
n번째 원소까지
def solution(num_list, n):
return num_list[:n]
n개 간격의 원소들
def solution(num_list, n):
answer = []
for i in range(len(num_list)):
if (i) % n == 0:
answer.append(num_list[i])
return answer
def solution(num_list, n):
return num_list[::n]
홀수 vs 짝수
def solution(num_list):
odd_sum = 0
even_sum = 0
for i in range(1, len(num_list)+1):
if i % 2 == 1:
odd_sum += num_list[i-1]
else:
even_sum += num_list[i-1]
return max(odd_sum, even_sum)
def solution(num_list):
return max(sum(num_list[::2]), sum(num_list[1::2]))
5명씩
def solution(names):
return [names[i] for i in range(0, len(names), 5)]
def solution(names):
return names[::5]
할 일 목록
def solution(todo_list, finished):
answer = list()
for i, v in enumerate(todo_list):
if finished[i] == False:
answer.append(v)
return answer
def solution(todo_list, finished):
return [v for i, v in enumerate(todo_list) if finished[i] == False]
n보다 커질 때까지 더하기
def solution(numbers, n):
answer = 0
for v in numbers:
answer += v
if n < answer:
return answer
수열과 구간 쿼리 1
def solution(arr, queries):
for i in range(len(queries)):
s, e = queries[i]
for add_i in range(s, e+1):
arr[add_i] += 1
return arr
조건에 맞게 수열 변환하기 1
def solution(arr):
for i, v in enumerate(arr):
if v >= 50 and v % 2 == 0:
arr[i] = v / 2
elif v < 50 and v % 2 == 1:
arr[i] = v * 2
return arr
조건에 맞게 수열 변환하기 2
def solution(arr):
temp_list = []
count = 0
while True:
temp_list = arr.copy()
for i, v in enumerate(arr):
if v > 50 and v % 2 == 0:
arr[i] = int(v / 2)
elif v < 50 and v % 2 == 1:
arr[i] = int(v * 2 + 1)
if arr == temp_list:
break
count += 1
return count
1로 만들기
def solution(num_list):
count = 0
for v in num_list:
while v != 1:
if v % 2 == 0:
v = v / 2
else:
v = (v-1) / 2
count += 1
return count
길이에 따른 연산
def solution(num_list):
if len(num_list) >= 11:
return sum(num_list)
else:
return eval("*".join(str(v) for v in num_list))
배열의 원소만큼 추가하기
def solution(arr):
answer = []
for v in arr:
for i in range(v):
answer.append(v)
return answer
def solution(arr):
return [v for v in arr for j in range(v)]
빈 배열에 추가, 삭제하기
def solution(arr, flag):
arr_X = []
for i, v in enumerate(flag):
if v == True:
for j in range(arr[i]):
arr_X.append(arr[i])
arr_X.append(arr[i])
else:
for j in range(arr[i]):
arr_X.pop()
return arr_X
배열 만들기 6
def solution(arr):
stk = []
for i in range(len(arr)):
if len(stk) == 0:
stk.append(arr[i])
elif stk[-1] == arr[i]:
stk.pop()
else:
stk.append(arr[i])
return stk if stk else [-1]
def solution(arr):
stk = []
for i in range(len(arr)):
if stk and stk[-1] == arr[i]:
stk.pop()
else:
stk.append(arr[i])
return stk or [-1]
무작위로 K개의 수 뽑기
def solution(arr, k):
answer = []
for v in arr:
if len(answer) < k:
if v not in answer:
answer.append(v)
else:
break
for _ in range(k - len(answer)):
answer.append(-1)
return answer
def solution(arr, k):
answer = []
for i in arr:
if i not in answer:
answer.append(i)
if len(answer) == k:
break
return answer + [-1] * (k - len(answer))
이차원 배열 문제 풀이
특별한 이차원 배열 1
def solution(n):
answer = [[0]*n for _ in range(n)]
for i in range(n):
answer[i][i] = 1
return answer
정수를 나선형으로 배치하기
def solution(n):
add_num = [(0,1), (1,0), (0,-1), (-1,0)]
answer = [[0]*n for _ in range(n)]
cur_i, cur_j, next_i, next_j, mode = 0, 0, 0, 0, 0
count = 0
visited = set()
while count < n*n:
# 현재 위치에 값 저장 후 방문 처리
count += 1
answer[cur_i][cur_j] = count
visited.add((cur_i, cur_j))
# 현재 위치 기준으로 다음 위치 정하기 위해 mode 변경
if mode == 0 and cur_j == n-1:
mode = 1
elif mode == 1 and cur_i == n-1:
mode = 2
elif mode == 2 and cur_j == 0:
mode = 3
elif mode == 3 and cur_i == 0:
mode = 0
# 다음 위치가 방문했던 위치면 mode 변경
next_i = cur_i + add_num[mode][0]
next_j = cur_j + add_num[mode][1]
if (next_i, next_j) in visited:
if mode == 0:
mode = 1
elif mode == 1:
mode = 2
elif mode == 2:
mode = 3
elif mode == 3:
mode = 0
# 현재 위치를 변경된 mode의 다음 위치로 변경
cur_i += add_num[mode][0]
cur_j += add_num[mode][1]
return answer
특별한 이차원 배열 2
def solution(arr):
for i in range(len(arr)):
for j in range(len(arr[i])):
if arr[i][j] != arr[j][i]:
return 0
return 1
정사각형으로 만들기
def solution(arr):
for i, v in enumerate(arr):
for _ in range(len(v), len(arr)):
arr[i].append(0)
for _ in range(len(arr), len(arr[0])):
arr.append([0] * len(arr[0]))
return arr
이차원 배열 대각선 순회하기
def solution(board, k):
answer = 0
for i in range(len(board)):
for j in range(len(board[i])):
if i + j <= k:
answer += board[i][j]
return answer
함수 문제 풀이
배열의 길이를 2의 거듭제곱으로 만들기
def solution(arr):
i = 0
while True:
if len(arr) <= 2**i:
for _ in range(2**i - len(arr)):
arr.append(0)
break
i += 1
return arr
배열 비교하기
def solution(arr1, arr2):
if len(arr1) == len(arr2):
if sum(arr1) > sum(arr2):
return 1
elif sum(arr1) < sum(arr2):
return -1
else:
return 0
elif len(arr1) > len(arr2):
return 1
else:
return -1
문자열 묶기
def solution(strArr):
strHash = {}
for v in strArr:
v_len = len(v)
if v_len not in strHash:
strHash[v_len] = 1
else:
strHash[v_len] += 1
return max(strHash.values())
배열의 길이에 따라 다른 연산하기
def solution(arr, n):
for i, v in enumerate(arr):
if len(arr) % 2 == 1 and i % 2 == 0:
arr[i] = v + n
elif len(arr) % 2 == 0 and i % 2 == 1:
arr[i] = v + n
return arr
뒤에서 5등까지
def solution(num_list):
num_list.sort()
return num_list[:5]
def solution(num_list):
return sorted(num_list)[:5]
뒤에서 5등 위로
def solution(num_list):
num_list.sort()
for _ in range(5):
num_list.pop(0)
return num_list
def solution(num_list):
return sorted(num_list)[5:]
전국 대회 선발 고사
def solution(rank, attendance):
true_list = [(rank[i], i) for i in range(len(rank)) if attendance[i] == True]
true_list.sort()
return 10000 * true_list[0][1] + 100 * true_list[1][1] + true_list[2][1]
def solution(rank, attendance):
true_list = sorted([(v, i) for i, v in enumerate(rank) if attendance[i]])
return 10000 * true_list[0][1] + 100 * true_list[1][1] + true_list[2][1]
정수 부분
def solution(flo):
return int(flo)
문자열 정수의 합
def solution(num_str):
answer = 0
for v in num_str:
answer += int(v)
return answer
def solution(num_str):
return sum(map(int, num_str))
문자열을 정수로 변환하기
def solution(n_str):
return int(n_str)
0 떼기
def solution(n_str):
return str(int(n_str))
def solution(n_str):
return n_str.lstrip("0")
두 수의 합
def solution(a, b):
return str(int(a) + int(b))
문자열로 변환
def solution(n):
return str(n)
Leave a comment