2021. 3. 4. 12:48ㆍWork/StudyDaily
코준 21-02-25
완주하지 못한 선수
https://programmers.co.kr/learn/courses/30/lessons/42576
import collections
def solution(participant, completion):
col_participant = collections.Counter(participant)
col_completion = collections.Counter(completion)
answer = col_participant - col_completion
return list(answer.keys())[0]
코준 21-02-25
두개 뽑아서 더하기!
def solution(numbers):
answer = []
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
if numbers[i] + numbers[j] not in answer:
answer.append(numbers[i] + numbers[j])
answer.sort()
return sorted(list(set(answer)))
코준 21-02-26
수포자
https://programmers.co.kr/learn/courses/30/lessons/42840
def solution(answers):
answer = []
# 반복해서 찍는 패턴
type1 = [1, 2, 3, 4, 5]
type2 = [2, 1, 2, 3, 2, 4, 2, 5]
type3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
# 문제 총 수
total_answer = len(answers)
count_list = [0,0,0]
# 문제 만큼 찍은 수 만들기
for i in range(total_answer):
if answers[i] == type1[i % len(type1)]:
count_list[0] += 1
if answers[i] == type2[i % len(type2)]:
count_list[1] += 1
if answers[i] == type3[i % len(type3)]:
count_list[2] += 1
res_list = list(filter(lambda x: count_list[x] == max(count_list), range(len(count_list))))
for index in res_list:
answer.append(index+1)
return answe
코준 21-02-26
K번째수
def solution(array, commands):
answer = []
for i, command_val in enumerate(commands):
# 슬라이스 시작 ~ 끝까지
start = command_val[0] - 1
end = command_val[1]
temp_array = list(array[start:end])
temp_array.sort()
# 정렬 & 선택
pick = command_val[2] - 1
answer.append(temp_array[pick])
return answer
print(solution([1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]]))
코준 21-02-26
체육복
https://rain-bow.tistory.com/entry/Python-프로그래머스-체육복
https://programmers.co.kr/learn/courses/30/lessons/42862#
def solution(n, lost, reserve):
answer = 0
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)
answer = n-len(set_lost)
return answer
코준 21-02-27
3진법 뒤집기
https://programmers.co.kr/learn/courses/30/lessons/68935?language=python3
def cycle(numlist, n):
print(n)
if n // 3 == 0:
numlist.append(n)
return;
else:
numlist.append(n%3)
cycle(numlist, n // 3)
def solution(n):
answer = 0
div_number = []
cycle(div_number, n)
div_number.reverse()
div_len = len(div_number)
for i in range(div_len):
answer += (3 ** i) * div_number[i] # 3의 n승 곱하기 해당 값
return answer
강의 21-03-01
파이썬을 파이썬 답게 강의 완료
https://programmers.co.kr/learn/courses/4008
알고리즘 코딩 테스트 연습1
코준 21-03-02
신규 아이디 추천
https://programmers.co.kr/learn/courses/30/lessons/72410
def removeDot(id_list, pos):
start = 0
end = len(id_list)-1
if pos == True or pos == "start": #맨 앞에 마침표 지우기
if id_list[start] == '.':
id_list[start] = ''
elif pos == False or pos == "end": #맨 뒤에 마침표 지우기
if id_list[end] == '.':
id_list[end] = ''
def solution(new_id):
if len(new_id) < 1 or len(new_id) > 1000:
return ''
answer = ''
speical_word = "-_.~!@#$%^&*()=+[{]}:?,<>/"
avalible_speical_word = ['-','_','.']
reduce_word = [] #제거 되어야 하는 문자열 규칙
for word in speical_word:
if word not in avalible_speical_word:
reduce_word.append(word)
print(reduce_word)
# 모든 대문자 소문자로 치환
change_new_id = new_id.lower()
print(change_new_id)
# 특수 문자 제거
for i in range(len(reduce_word)):
change_new_id = change_new_id.replace(reduce_word[i],"")
print(change_new_id)
# 연속으로 나오는 마침표 압축
change_new_id = list(change_new_id)
cnt_word = 0
for i, end in enumerate(change_new_id):
if end == '.':
cnt_word += 1
else:
cnt_word = 0
if cnt_word > 1:
change_new_id[i] = ''
change_new_id = list(filter(None, change_new_id))
# 처음 or 끝에 마침표는 제거
removeDot(change_new_id, "start")
removeDot(change_new_id, "end")
change_new_id = list(filter(None, change_new_id))
# new_id가 빈 문자열이면 new_id에 a 대입
if len(change_new_id) == 0:
change_new_id.append("a")
# id 길이가 16자 이상이면 15개 문자 제외 문자들 모두 제거
if len(change_new_id) >= 16:
change_new_id = change_new_id[0:15]
# 마지막 글자가 마침표면 제거
removeDot(change_new_id, "end")
change_new_id = list(filter(None, change_new_id))
# new_id 길이가 2자 이하면 3이 될 때까지 반복
while len(change_new_id) <= 2:
change_new_id.append(change_new_id[len(change_new_id)-1])
answer = ''.join(change_new_id)
return answer
#print(solution("...eqwe@# dasd... @# eq.rwqerqwr!.."))
print(solution("...!.."))
코준 21-03-02
2016년 월, 달 구하기
https://programmers.co.kr/learn/courses/30/lessons/12901
def solution(a, b):
answer = ''
# 윤년이기 때문에 2월은 29
month_max = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
day_Eng = ["FRI","SAT","SUN","MON","TUE","WED","THU"] # 금요일 부터 시작했기 때문에 기준점 시작을 금요일로 만든다
# 없는 날은 주어지지 않는다.
# 1월 1일로 부터 몇일 떨어져 있는가?
# 5 - 1 = 4, 24 - 1 = 23
month_to_day = sum(month_max[:(a-1)]) + (b - 1)
day = month_to_day % 7 # 7일 씩 요일이 바뀌므로 7로 나누어 준다
print(month_to_day, day)
answer = day_Eng[day]
return answer
코준 21-03-02
가운데 글자 가져오기
https://programmers.co.kr/learn/courses/30/lessons/12903
def solution(s):
answer = ''
# 예외
if len(s) < 1 or len(s) > 100:
return -1
# 홀 or 짝 판단
div_check = len(s) % 2
value_check = len(s) // 2
print(div_check, value_check)
if div_check == 0: #짝
answer = s[value_check-1:value_check+1]
else:
answer = s[value_check]
return answer
코준 21-03-02
두 정수 사이의 합
https://programmers.co.kr/learn/courses/30/lessons/12912
def solution(a, b):
answer = 0
# 제한 사항
# a == b, return a or b
if a == b:
return a
# 범위
if a < -10000000 or a > 10000000 or b < -10000000 or a > 10000000:
return -1
# 작은 수 먼저 처리
if a > b:
a, b = b, a
# 식 프로세스
# a = 3, b = 5
# 3(a+0), 4(a+1), 5(a+2)
# 3+4+5 = 3a + (0+1+2) = 3a + (n*(n+1)/2)
n = b - a
multi_a = n + 1
answer = multi_a * a + (n*(n+1)//2)
return answer
코준 21-03-02
같은 숫자는 싫어
https://programmers.co.kr/learn/courses/30/lessons/12906
def solution(arr):
answer = []
# 문자열 압축
temp_ary = -1
for i,compress in enumerate(arr):
if temp_ary == -1:
temp_ary = arr[0]
else:
if temp_ary == compress:
arr[i] = -1
else:
temp_ary = arr[i]
# -1은 중복 값 이므로 제거
for num in arr:
if num != -1:
answer.append(num)
return answer
코준 21-03-02
나누어 떨어지는 숫자 배열
https://programmers.co.kr/learn/courses/30/lessons/12910
def solution(arr, divisor):
answer = []
# 제한 사항 체크
for type_arr in arr:
if type(type_arr) == float:
return -1
if type(divisor) == float:
return -1
if len(arr) < 1:
return -1
arr_list = [i for i in arr if i % divisor == 0]
answer = sorted(arr_list)
# 나누어 떨어지는 수가 없으면 -1
if len(answer) == 0:
answer = [-1]
return answer
코준 21-03-03
정수 제곱근 판별
https://programmers.co.kr/learn/courses/30/lessons/12934
def solution(n):
answer = 0
if n > 50000000000000:
return -1
val = n ** 0.5
if val == int(val):
answer = int((val+1) ** 2)
else:
answer = -1
return answer
def nextSqure(n):
sqrt = n ** (1/2)
if sqrt % 1 == 0:
return (sqrt + 1) ** 2
return 'no'
def nextSqure(n):
return n == int(n**.5)**2 and int(n**.5+1)**2 or 'no'
코준 21-03-03
정수 내림차순으로 배치하기
https://programmers.co.kr/learn/courses/30/lessons/12933
def solution(n):
answer = 0
if n > 8000000000:
return -1
str_temp = sorted(str(n), reverse=True)
str_temp = ''.join(map(str,str_temp))
answer = int(str_temp)
return answer
def solution(n):
ls = list(str(n))
ls.sort(reverse = True)
return int("".join(ls))
코준 21-03-03
자연수 뒤집어 배열로 만들기
https://programmers.co.kr/learn/courses/30/lessons/12932
def solution(n):
answer = []
if n > 10000000000:
return -1
str_temp = list(map(int,list(str(n))))
answer = list(reversed(str_temp))
return answer
def digit_reverse(n):
return list(map(int, reversed(str(n))))
코준 21-03-03
자릿수 더하기
https://programmers.co.kr/learn/courses/30/lessons/12931
def solution(s):
answer = 0
str_temp = sum(map(int,list(str(s))))
answer = str_temp
return answer
코준 21-03-03
이상한 문자 만들기
https://programmers.co.kr/learn/courses/30/lessons/12930
def solution(s):
answer = 0
list_str = [''] * len(s)
cont = 0
for i , val in enumerate(s):
if cont % 2 == 0:
list_str[i] = str(val).upper()
else:
list_str[i] = str(val).lower()
if val == ' ':
cont = -1
cont += 1
answer = ''.join(list_str)
return answer
def solution(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))
코준 21-03-03
약수의 합
https://programmers.co.kr/learn/courses/30/lessons/12928
def solution(n):
answer = 0
sum = 0
for val in range(1,n+1):
if n % val == 0: # 약수
sum += val
answer = sum
return answer
def solution(n):
answer = 0
sum = 0
for val in range(1,n+1):
if n % val == 0: # 약수
sum += val
answer = sum
return answer
코준 21-03-03
내적
https://programmers.co.kr/learn/courses/30/lessons/70128
def solution(a, b):
answer = 0
temp = [a * b for a,b in zip(a,b)]
answer = sum(temp)
return answer
def solution(a, b):
return sum(map(lambda i: a[i]*b[i], range(len(a))))
코준 21-03-03
시저 암호
https://programmers.co.kr/learn/courses/30/lessons/12926
import string
def solution(s, n):
answer = ''
base = ''
for ch in s:
if ch in string.ascii_lowercase:
base = string.ascii_lowercase
elif ch in string.ascii_uppercase:
base = string.ascii_uppercase
else:
answer += ch
continue
a = base.index(ch) + n
answer += base[a % len(base)]
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)
코준 21-03-03
문자열을 정수로 바꾸기
https://programmers.co.kr/learn/courses/30/lessons/12925?language=python3
def solution(s):
answer = int(s)
return answer
코준 21-03-03
수박수박수박수박수박수?
https://programmers.co.kr/learn/courses/30/lessons/12922
def solution(n):
answer = ''
# limit
if n < 1 or n > 10000:
return -1
samples = ['수','박']
temp_list = []
for i in range(n):
if i % 2 == 0:
temp_list.append(samples[0])
else:
temp_list.append(samples[1])
answer = ''.join(temp_list)
return answer
def water_melon(n):
return "수박"*(n//2) + "수"*(n%2)
코준 21-03-03
소수 찾기(에라토스의 체)
https://programmers.co.kr/learn/courses/30/lessons/12921
def solution(n):
answer = 0
# limit
if n < 2 or n > 1000000:
return -1
# 소수는 2부터
temp_prime_bool_list = [False,False] + [True]*(n-1) # 1, 2는 False로 나머지는 모두 True로
temp_prime = []
for i in range(2,n+1):
if temp_prime_bool_list[i]:
temp_prime.append(i)
for j in range(2*i, n+1, i):
temp_prime_bool_list[j] = False
answer = len(temp_prime)
return 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)
# for i in range(2,n+1): --> for i in range(2,int(n**0.5)+1): 로 바꾸면 계산 횟수가 줄어서 빨라질 것 같습니다.
#num-=set(range(2*i,n+1,i)) --> num -= set(range(i*i,n+1,i)) 같은 관점에서 이렇게도 수정해도 될 것 같습니다.
#num = set(range(3, n+1, 2)); for i in range(3, int(sqrt(n))+1): 으로 하면 효율성이 2~3배 상승합니다
# 소수 판단
def isprime(num):
if num != 1:
for i in range(2, num):
if num % i == 0:
return False
else:
return False
return True
코준 21-03-03
서울에서 김서방 찾기
https://programmers.co.kr/learn/courses/30/lessons/12919
def solution(seoul):
answer = ''
answer = '김서방은 {0}에 있다'.format(seoul.index("Kim"))
return answer
코준 21-03-03
문자열 다루기 기본
https://programmers.co.kr/learn/courses/30/lessons/12918
def solution(s):
answer = True
# limit
if len(s) < 1 or len(s) > 8:
return -1
# 4 or 6
print(len(s))
if len(s) < 4 or len(s) > 6 or len(s) == 5:
return False
# 숫자로만 구성
# char 숫자는 아스키 코드로 48('0') ~ 57('9')에 위치하니 해당 값보다 작거나 크면 다른 문자 값이다.
for value in list(s):
if ord(value) < 48 or ord(value) > 57:
answer = False
break
return answer
def alpha_string46(s):
return s.isdigit() and len(s) in (4, 6)
def alpha_string46(s):
return s.isdigit() and len(s) in (4, 6)
코준 21-03-03
문자열 내림차순으로 배치하기
https://programmers.co.kr/learn/courses/30/lessons/12917
def solution(s):
answer = True
#limit
if len(s) < 1:
return -1
# 대, 소 분리
low = []
upp = []
for value in s:
if str(value).islower():
low.append(value)
else:
upp.append(value)
answer = ''.join(sorted(low, reverse=True) + sorted(upp, reverse=True))
return answer
def solution(s):
return ''.join(sorted(s, reverse=True))
코준 21-03-03
문자열 내 p와 y의 개수
https://programmers.co.kr/learn/courses/30/lessons/12916
from typing import Counter
def solution(s):
answer = True
result_s = str(s)
result_s = result_s.lower()
count_result = Counter(result_s)
#answer = lambda x: True if count_result['p'] == count_result['y'] else False
if count_result['p'] == count_result['y']:
answer = True
else:
answer = False
return answer
def numPY(s):
return s.lower().count('p') == s.lower().count('y')
코준 21-03-03
폰켓몬
https://programmers.co.kr/learn/courses/30/lessons/1845
def solution(nums):
answer = 0
# limit
if len(nums) < 1 or len(nums) > 10000:
return -1
# 고를 수 있는 수
able_pick = len(nums) // 2
# 중복 없는 포켓몬 수
not_overlap = len(set(nums))
# answer = min(able_pick, not_overlap) 해당 부분은 요렇게 고쳐질 수 있다!
if able_pick == not_overlap:
answer = able_pick
elif able_pick > not_overlap:
answer = not_overlap
elif able_pick < not_overlap:
answer = able_pick
return answer
def solution(ls):
return min(len(ls)/2, len(set(ls)))
코준 21-03-03
문자열 내 마음대로 정렬하기
https://programmers.co.kr/learn/courses/30/lessons/12915
https://programmers.co.kr/learn/courses/30/lessons/12915/solution_groups?language=python3
def solution(strings, n):
return sorted(sorted(strings), key=lambda x:x[n])
나는 이런식으로 strings의 n번째 word를 받아서 다시 정렬 후 재정렬 하려고 했는데 다른 사람 풀이는 전체 정렬 후 strings의 n번째 wrod를 받아서 다시 정렬 함..
즉 : 나의 풀이와 반대로 생각해서 적용한것.
def solution(strings, n):
answer = []
# limit
if len(strings) < 1 or len(strings) > 50:
return -1
low_check = ''.join(strings)
if low_check.isupper():
return -1
for str in strings:
if len(str) < 1 or len(str) > 100 or len(str) < n:
return -1
# process
dict_str = {}
list_str = list(strings)
for i, str in enumerate(list_str):
dict_str[i] = str[n]
dict_str_sort = sorted(dict_str.items(),key=(lambda x:x[1]))
for key, value in dict_str_sort:
answer.append(strings[key])
dic_answer = {}
for i, value in enumerate(answer):
dic_answer[i] = value
# sort
temp = ''
start = 0
for i, value in dic_answer.items():
if temp == '':
temp = value[n]
else:
if temp == value[n]:
a = sorted(value)
print(temp, value[n], value)
else:
temp = value[n]
start = i
return answer
'Work > StudyDaily' 카테고리의 다른 글
Daily Study for Coding Test (03/04) (0) | 2021.03.05 |
---|---|
Computer Science (0) | 2021.03.04 |