인형뽑기
https://programmers.co.kr/learn/courses/30/lessons/64061
import numpy as np
def solution(board, moves):
answer = 0
a = np.array(board).T.tolist()
# 뽑은 값을 저장해 놓을 리스트
lst = list()
for i in moves:
n=0
try:
while n ==0:
n = a[i-1].pop(0)
lst.append(n)
if (len(lst)>1) & (n == lst[-2]):
answer += 1
del lst[-1]
del lst[-1]
except:
pass
# 사라진 인형들 개수
return answer*2
모의고사
https://programmers.co.kr/learn/courses/30/lessons/42840
def solution(answers):
p = [[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
s = [0] * len(p)
for q, a in enumerate(answers):
for i, v in enumerate(p):
if a == v[q % len(v)]:
s[i] += 1
return [i + 1 for i, v in enumerate(s) if v == max(s)]
두 정수 사이의 합
https://programmers.co.kr/learn/courses/30/lessons/12912
def solution(a, b):
return sum(range(min(a,b), max(a,b) + 1))
2016년
https://programmers.co.kr/learn/courses/30/lessons/12901
from datetime import datetime
def solution(a, b):
week = ['MON','TUE','WED','THU','FRI','SAT','SUN']
day = datetime(year = 2016, month = a, day =b)
return week[day.weekday()]
같은 숫자는 싫어
https://programmers.co.kr/learn/courses/30/lessons/12906
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
문자열 다루기 기본
https://programmers.co.kr/learn/courses/30/lessons/12918
def solution(s):
if len(s) not in (4,6):
return False
for ch in s:
if ord(ch) not in range(48, 58):
return False
return True
문자열 내 맘대로 정렬하기
https://programmers.co.kr/learn/courses/30/lessons/12915
def solution(strings, n):
return sorted(strings, key = lambda x : (x[n], x))
나누어 떨어지는 숫자 배열
https://programmers.co.kr/learn/courses/30/lessons/12910
def solution(arr, divisor):
return sorted([i for i in arr if i % divisor == 0]) or [-1]
문자열 내 p와 y의 개수
https://programmers.co.kr/learn/courses/30/lessons/12916
def solution(s):
if s.lower().count('p') == s.lower().count('y'):
return True
else:
return False
문자열 내림차순으로 배치하기
https://programmers.co.kr/learn/courses/30/lessons/12917
def solution(s):
return ''.join(sorted(s, reverse=True))
문자열 다루기 기본
https://programmers.co.kr/learn/courses/30/lessons/12918
[정규식]
- \d: 숫자
- \D: 숫자가 아닌 것
- \s: whitespace (\t,\n,\r,\f,\v)
- \S: whitespace가 아닌 것
- \w: 문자 + 숫자와 매치
- \W: 문자 + 숫자가 아닌 것
def solution(s):
if len(s) in (4, 6):
try:
int(s)
return True
except:
return False
else:
return False
서울에서 김서방 찾기
https://programmers.co.kr/learn/courses/30/lessons/12919
def solution(seoul):
for i,j in enumerate(seoul):
if j == 'Kim':
return "김서방은 {}에 있다".format(i)
def findKim(seoul):
return "김서방은 {}에 있다".format(seoul.index('Kim'))
소수찾기
https://programmers.co.kr/learn/courses/30/lessons/12921
- 에라토스테네스의 체
def solution(n):
a = [False, False] + [True]*(n-1)
answer = []
for i in range(2,n+1):
if a[i]:
answer.append(i)
for j in range(2*i, n+1, i):
a[j] = False
return len(answer)
def solution(n):
num=set(range(2,n+1))
for i in range(2,n+1):
if i in num:
num-=set(range(2*i,n+1,i))
return len(num)
수박수박수
https://programmers.co.kr/learn/courses/30/lessons/12922
def solution(n):
b = '수박'*n
answer = ''
for i in range(n):
answer = answer + b[i]
return answer
def water_melon(n):
s = "수박" * n
return s[:n]
시저암호
https://programmers.co.kr/learn/courses/30/lessons/12926
def solution(s,n):
abc = 'abcdefghijklmnopqrstuvwxyz'
ABC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
answer = ''
for i in s:
if i in abc:
index = abc.find(i)
index += n
answer = answer + abc[index%26]
elif i in ABC:
index = ABC.find(i)
index += n
answer = answer + ABC[index%26]
else:
answer = answer + ' '
return answer
def caesar(s, n):
s = list(s)
for i in range(len(s)):
if s[i].isupper():
s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
elif s[i].islower():
s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))
return "".join(s)
약수의 합
https://programmers.co.kr/learn/courses/30/lessons/12928
def solution(n):
answer = 0
for i in range(1,n+1):
if n % i == 0:
answer += i
return answer
def sumDivisor(num):
# num / 2 의 수들만 검사하면 성능 약 2배 향상된다.
return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
이상한 문자 만들기
https://programmers.co.kr/learn/courses/30/lessons/12930
def solution(a):
lst = a.split(' ')
answer = []
for i in lst:
v = list(i)
for z,x in enumerate(v):
if z % 2 == 0:
v[z] = x.upper()
else:
v[z] = x.lower()
answer.append(''.join(v))
return ' '.join(answer)
def toWeird(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))
자릿수 더하기
https://programmers.co.kr/learn/courses/30/lessons/12931
import timeit
def solution(n):
start = timeit.default_timer()
answer = 0
for i in str(n):
answer += int(i)
stop = timeit.default_timer()
return answer, stop-start
solution(12)
'''
(3, 3.200000264769187e-06)
'''
def solution(n):
start = timeit.default_timer()
answer = 0
while n > 0:
answer += n % 10
n = n // 10
stop = timeit.default_timer()
return answer, stop-start
solution(12)
'''
(3, 1.600000359758269e-06)
'''
# 재귀구조
def sum_digit(number):
start = timeit.default_timer()
if number < 10:
return number;
a = (number % 10) + sum_digit(number // 10)
stop = timeit.default_timer()
return a , stop-start
sum_digit(12)
'''
(3, 2.100000074278796e-06)
'''
자연수 뒤집어 배열로 만들기
https://programmers.co.kr/learn/courses/30/lessons/12932
def solution(n):
start = timeit.default_timer()
a = list(map(lambda x: int(x), str(n)))[::-1]
stop = timeit.default_timer()
return stop-start
solution(123)
'''
6.800000846851617e-06
'''
# reversed를 쓰는게 lambda보다 더 빠른 걸로.
def digit_reverse(n):
start = timeit.default_timer()
a = list(map(int, reversed(str(n))))
stop = timeit.default_timer()
return stop-start
digit_reverse(123)
'''
5.399999281507917e-06
'''
체육복
https://programmers.co.kr/learn/courses/30/lessons/42862
def solution(n,lost,reserve):
set_reserve = set(reserve) - set(lost)
set_lost = set(lost) - set(reserve)
for i in set_reserve:
if i-1 in set_lost:
set_lost.remove(i-1)
elif i+1 in set_lost:
set_lost.remove(i+1)
return n-len(set_lost)
def solution(n, lost, reserve):
# 없는 학생 제외
students = [1 if i+1 not in lost else 0 for i in range(n)]
# 여벌있는 학생 포함
students = [num+1 if index+1 in reserve else num for index, num in enumerate(students)]
for i in range(0, len(students) - 1):
if students[i] == 0 and students[i+1] == 2:
students[i] = 1
students[i+1] -= 1
elif students[i] == 2 and students[i+1] == 0:
students[i] = 1
students[i+1] = 1
return sum([1 for i in students if i != 0])
정수 내림차순으로
https://programmers.co.kr/learn/courses/30/lessons/12933
def solution(n):
n = sorted(list(str(n)))[::-1]
return int(''.join(n))
def solution(n):
answer = ''
lst = []
while n > 0:
r = n % 10
n = n // 10
lst.append(r)
lst.sort()
lst.reverse()
for j in range(0, len(lst)):
answer += str(lst[j])
return int(answer)
Comments