프로그래머스 Lv1
1회독 목표 : 빨리풀기, 정답맞추기
(2회독 목표 : 코드 길이/복잡도 줄이기)
가나다순 정렬 ctrl + F로 찾기~
가운데 글자 가져오기
def solution(s):
answer = ''
if len(s)%2 == 1 :
answer += s[int(len(s)/2)]
else :
answer += s[int(len(s)/2)-1:int(len(s)/2)+1]
return answer
가장 가까운 같은 글자
def solution(s):
a = 'abcdefghijklmnopqrstuvwxyz'
b = [-1 for i in range(len(a))]
table = dict(zip(a,b))
temp = []
for i in range(len(s)):
if table[s[i]] == -1 :
temp.append(-1)
table[s[i]] = i
else :
temp.append(i-table[s[i]])
table[s[i]] = i
return temp
같은 숫자는 싫어
def solution(arr):
answer = [arr[0]]
for i in range(1,len(arr)):
if answer[-1] != arr[i]:
answer.append(arr[i])
return answer
기사단원의 무기
def solution(number, limit, power):
fe = 0
for i in range(1, number + 1): # 기사단원 루프
count = 0 # 약수개수 아직 안셌음
for j in range(1, int(i ** 0.5) + 1): # 제곱근까지만 돌면서 약수 개수 세기
if i % j == 0: # 나머지0이면 약수
if j * j == i: # 중복 약수인 경우는 빼줌
count += 1
else:
count += 2 # 두 개의 약수 추가
if count > limit:
count = power
fe += count
return fe
제곱근 이상으로 탐색하면 시간복잡도때문에 오류발생
개인정보 수집 유효기간 (2023 KAKAO BLIND RECRUITMENT)
def solution(today, terms, privacies):
today_y,today_m,today_d = map(int,today.split('.'))
today_int = today_y*12*28+today_m*28+today_d
temp_policy,temp_terms = [],[]
for i in range(len(terms)): # terms 약관에 따른 기간 dict
x,y = terms[i].split()
temp_policy.append(x)
temp_terms.append(y)
table = dict(zip(temp_policy,temp_terms))
result = []
for i in range(len(privacies)):
ymd = privacies[i][:10]
policy = privacies[i][-1]
y,m,d = map(int,ymd.split('.'))
temp_int = y*12*28+(m+int(table[policy]))*28+d
if today_int >= temp_int :
result.append(i+1)
return result
28일 조건 이용해서 일수 따져서 풀기
월 더해서 년도 바꾸는거보다 조건도 적고 쉽다. 반례 고려도 생각할 필요 x
과일장수
def solution(k, m, score):
price = 0
out = len(score)%m # 버릴거
box = len(score)//m # 박스수
score.sort(reverse=True)
if out != 0:
del score[-out:] # 남은거버리고
for i in range(box):
box_price = score[m*i-1]*m
price += box_price
return price
나누어 떨어지는 숫자배열
def solution(arr, divisor):
answer = []
for i in arr :
if i%divisor == 0:
answer.append(i)
answer.sort()
if answer == [] :
return [-1]
return answer
나머지가 1이 되는 수 찾기
def solution(n):
i=2
while True:
if n%i == 1:
break
else:
i += 1
return i
탐색 최소화하기
내적
def solution(a, b):
answer = 0
for i in range(len(a)):
answer += (a[i]*b[i])
return answer
다트 게임 (2018 KAKAO BLINE RECRUITMENT)
def solution(a):
temp,idx,score = [],[],[]
count,i = 0,2
while True : # 문자열나누기
if a[i] in '1234567890' :
idx.append(i)
count += 1
i += 1
if count == 2:
break
i += 1
temp.append(a[:idx[0]])
temp.append(a[idx[0]:idx[1]])
temp.append(a[idx[1]:])
table = dict(zip(['S','D','T','#','*'],[1,2,3,-1,2]))
for i in range(3): # 점수계산
if temp[i][:2] == '10':
score.append(10**table[temp[i][2]])
if temp[i]==4:
if temp[i][3]=='*':
if i==0 :
score[0] = score[0]*2
else :
score[-1] = score[-1]*2
score[-2] = score[-2]*2
if temp[i][3]=='#':
score[i] = score[i]*(-1)
else :
score.append(int(temp[i][0])**table[temp[i][1]])
if len(temp[i])==3:
if temp[i][2]=='*':
if i==0 :
score[0] = score[0]*2
else :
score[-1] = score[-1]*2
score[-2] = score[-2]*2
if temp[i][2]=='#':
score[i] = score[i]*(-1)
return sum(score)
10이라는 예외 케이스를 잘 다뤄야 코드를 줄이는데 바로바로 생각하기 어렵네용
달리기 시합
def solution(p,c):
rank = list(range(1,len(p)+1))
table_rank = dict(zip(rank,p)) # 등수표
table_name = dict(zip(p,rank)) # 업데이트에 필요한 temp공간
for i in range(len(c)) :
rank_now = table_name[c[i]] # 이름불린애 등수찾고
temp = table_rank[rank_now-1] # 앞 등수애 이름 저장
table_rank[rank_now-1] = c[i] # 앞 등수에 호명한애
table_rank[rank_now] = temp # 있던 자리에 추월당한 temp
table_name[table_rank[rank_now-1]] = rank_now-1 #
table_name[table_rank[rank_now]] = rank_now
result = []
for i in range(1,len(p)+1):
result.append(table_rank[i])
return result
def solution(p,c): # 시간복잡도 때문에 테스트 8~13 시간초과
temp = p.copy()
for i in range(len(c)):
cut = temp.index(c[i])
a,b = temp[:cut],temp[cut:]
a[-1],b[0] = b[0],a[-1]
temp = a+b
return temp
덧칠하기
def solution(n, m, section):
answer = 0
done = 0 # 칠한 곳 까지 인덱스
for i in section:
if i >= done: # 색칠할 구역이 색칠한 구역보다 크면
done = i + m # 다 칠하고 다음구역
answer +=1 # 세고
return answer
두 개 뽑아서 더하기
def solution(number):
temp = set({})
for i in range(len(number)):
for j in range(i+1,len(number)):
temp.add(number[i]+number[j])
answer = list(temp)
answer.sort()
return answer
두 정수 사이의 합
def solution(a, b):
answer =0
if a==b:
answer = a
elif a<b:
answer = sum(list(range(a,b+1)))
else :
answer = sum(list(range(b,a+1)))
return answer
둘만의 암호
def solution(s, skip, index):
temp = ['a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v','w','x','y','z']
skip_temp = list(skip)
print(skip_temp)
for i in range(len(skip_temp)):
temp.remove(skip_temp[i])
len(temp)
s_list = list(s)
result_index = []
for i in range(len(s_list)):
result_index.append((temp.index(s_list[i])+index)%len(temp))
result = []
for i in range(len(result_index)):
result.append(temp[result_index[i]])
answer ="".join(result)
return answer
대충 만든 자판
def solution(keymap, target):
zero = [i-i for i in range(0,26) ]
alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
table = dict(zip(alphabet,zero))
for i in range(len(keymap)): # 키맵 하나씩 접근
temp = list(keymap[i])
for j in range(len(temp)): # 요소확인
if table[temp[j]]==0:
table[temp[j]] = j+1 # 인덱스 업데이트
else: # 최소인덱스
if table[temp[j]] > j+1 : # 기존거보다 빨리나오면
table[temp[j]] = j+1 # 그 인덱스로 변경
result = []
stop = False
for i in range(len(target)):
count = 0
temp = list(target[i])
for j in range(len(temp)):
if table[temp[j]]==0: # 사용 안되는 문자열 존재
count =-1
stop = True
break
else:
count += table[temp[j]]
result.append(count)
return result
로또의 최고 순위와 최저 순위
def solution(lottos, win_nums):
zero,o = 0,0
for i in range(len(lottos)) :
if lottos[i] == 0:
zero += 1
if lottos[i] in win_nums :
o += 1
if zero == 0 :
answer = [7-o,7-o]
else :
answer = [7-o-zero,7-o]
if answer[1] >= 7 :
answer[1] = 6
if answer[0] >= 7 :
answer[0] = 6
return answer
진짜 멍청하게 푼듯. 6등 넘는거 잡아줘서 풀기
모의고사
def solution(q):
a = []
count = [0,0,0]
st1 = [1, 2, 3, 4, 5]
st2 = [2, 1, 2, 3, 2, 4, 2, 5]
st3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
for i in range(len(q)):
if q[i]==st1[i%len(st1)] :
count[0] += 1
if q[i]==st2[i%len(st2)] :
count[1] += 1
if q[i]==st3[i%len(st3)] :
count[2] += 1
for i in range(len(count)):
if len(set(count)) == 3:
a.append(count.index(max(count))+1)
break
elif len(set(count)) == 1:
a = [1,2,3]
break
else:
if count[i] == max(count):
a.append(i+1)
a.sort()
return a
문자열 나누기
def solution(s):
count1,count2,answer = 0,0,0
counting = False
temp = ''
for i in range(len(s)):
if counting == False : # 세는중 아니면
temp += s[i] # 문자정하고
count1 += 1 # 세는 문자 카운트 올리고
counting = True # 세는중으로
else:
if temp == s[i]:
count1 += 1
else :
count2 += 1
if count1 == count2 :
answer += 1
count1, count2 = 0,0
temp = ''
counting = False
if counting == True and i==(len(s)-1) :
answer += 1
return answer
케이스 2번같이 남는 경우 고려해야할듯
문자열 내림차순으로 배치하기
def solution(s):
answer = ''.join(sorted(s))
answer = answer[::-1]
return answer
문자열 내 마음대로 정렬하기
def solution(strings, n):
answer,result = [],[]
if n == 0:
strings.sort()
return strings
else :
temp = []
for i in range(len(strings)):
temp = strings[i][n] + strings[i]
answer.append(temp)
answer.sort()
for i in range(len(strings)):
result.append(answer[i][1:])
return result
문자열 다루기 기본
def solution(s):
if len(s) == 4 :
a = list(s)
a.sort()
b = list('1234567890')
if a[-1] not in b:
return False
else :
return True
elif len(s) == 6 :
a = list(s)
a.sort()
b = list('1234567890')
if a[-1] not in b:
return False
else :
return True
else :
return False
다시 똑똑하게 풀기
문자열을 정수로 바꾸기
def solution(s):
if s[0] == '-' :
return int(s[1:])*(-1)
elif s[0] == '+' :
return int(s[1:])
else :
return int(s)
문자열 내 p와 y의 개수
def solution(s):
if (s.count('p')+s.count('P')) == (s.count('y')+s.count('Y') ):
return True
else :
return False
명예의 전당 (1)
def solution(k, score):
hall,answer = [],[]
for i in range(len(score)):
if i == 0 :
hall.append(score[i])
answer.append(score[i])
elif i < k :
hall.append(score[i])
answer.append(min(hall))
else :
if score[i] <= min(hall) :
answer.append(min(hall))
else :
hall.remove(min(hall))
hall.append(score[i])
answer.append(min(hall))
return answer
바탕화면 정리
def solution(wallpaper):
h,w = len(wallpaper),len(list(wallpaper[0]))
point_x,point_y = [],[]
for i in range(h):
temp = wallpaper[i]
for j in range(w):
if temp[j] == '#':
point_x.append(i)
point_y.append(j)
result = []
result.append(min(point_x))
result.append(min(point_y))
result.append(max(point_x)+1)
result.append(max(point_y)+1)
return result
부족한 금액 계산하기
def solution(price, money, count):
need = 0
for i in range(1,count+1):
need += price*i
if money >= need :
return 0
else :
return (need-money)
비밀지도
def solution(n, arr1, arr2):
map1,map2,key = [],[],[]
for i in arr1 :
temp = ''
if i==0:
map1.append(['0','0','0','0','0'])
else :
while i>0 :
temp += str(i%2)
i = i//2
temp1 = temp[::-1]
if len(temp1) != n:
temp1 = '0'*(n-len(temp1))+ temp1
map1.append(list(temp1))
for i in arr2 :
temp = ''
if i==0:
map2.append(['0','0','0','0','0'])
else:
while i>0 :
temp += str(i%2)
i = i//2
temp1 = temp[::-1]
if len(temp1) != n:
temp1 = '0'*(n-len(temp1))+ temp1
map2.append(list(temp1))
for i in range(n):
temp = ''
for j in range(n):
if map1[i][j]=='0' and map2[i][j]=='0' :
temp += ' '
else :
temp += '#'
key.append(temp)
return key
삼총사
def solution(number):
count = 0
temp = []
for i in range(len(number)-2):
temp = []
for j in range(i+1,len(number)-1):
for k in range(j+1,len(number)):
temp.append(number[i])
temp.append(number[j])
temp.append(number[k])
if sum(temp) == 0 :
count += 1
temp = []
return count
서울에서 김서방 찾기
def solution(seoul):
x = seoul.index('Kim')
answer = f'김서방은 {x}에 있다'
return answer
소수 만들기
def solution(nums):
answer = 0
max_num = max(nums)*3
prime = [True]*(max_num+1)
for i in range(2,int(max_num**(1/2)+1)+1):
if prime[i]==True :
for j in range(i+i,max_num+1,i):
prime[j] = False
n = len(nums)
for i in range(n):
for j in range(i+1,n):
for k in range(j+1,n):
if prime[nums[i]+nums[j]+nums[k]]:
answer += 1
return answer
배열 수 적은거 보자마자 3중 for문 사용
소수 찾기
def solution(n):
num = [True]*(n+1)
for i in range(2,int(n**(1/2)+1)+1):
if num[i] == True:
for j in range(i+i,n+1,i):
num[j] = False
return len([i for i in range(2,n+1) if num[i] == True])
수박수박수박수박수박수?
def solution(n):
temp = ''
for i in range(1,n+1):
if i%2 == 1 :
temp += '수'
else :
temp += '박'
return temp
숫자짝꿍
def solution(x,y):
a,b = list(str(x)),list(str(y))
friend = set(a)&set(b)
friend_list = list(friend)
friend_list.sort(reverse=True)
if len(friend_list) == 0:
return str(-1)
elif friend_list == ['0']:
return str(0)
else :
temp = []
for i in friend_list:
p,q = a.count(i),b.count(i)
temp.append(min(p,q))
answer = []
for i in range(len(friend_list)):
answer.append(friend_list[i]*temp[i])
result = "".join(answer)
return result
숫자 문자열과 영단어
def solution(s):
number,answer = '0123456789',''
i=0
while i < len(s) :
if s[i] in number :
answer += s[i]
i += 1
else :
if s[i:i+2] == 'ze':
answer += '0'
i += 4
elif s[i:i+2] == 'on':
answer += '1'
i += 3
elif s[i:i+2] == 'tw':
answer += '2'
i += 3
elif s[i:i+2] == 'th':
answer += '3'
i += 5
elif s[i:i+2] == 'fo':
answer += '4'
i += 4
elif s[i:i+2] == 'fi':
answer += '5'
i += 4
elif s[i:i+2] == 'si':
answer += '6'
i += 3
elif s[i:i+2] == 'se':
answer += '7'
i += 5
elif s[i:i+2] == 'ei':
answer += '8'
i += 5
elif s[i:i+2] == 'ni':
answer += '9'
i += 4
answer = int(answer)
return answer
enumerate도 생각해봤는데 순회 제일 덜하는거 같아서 좀 단순무식하게 짰음
enumerate나 dict 사용이 좋겠네요
문제 대충읽어서 s 길이가 2000000000이하인줄 ㅠ
시저암호
def solution(s, n):
a = 'abcdefghijklmnopqrstuvwxyz'
A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
a_after = a[n:]+a[:n]
A_after = A[n:]+A[:n]
answer = ''
for i in s:
if i == ' ' :
answer += ' '
else :
if i in a:
answer += a_after[a.index(i)]
else :
answer += A_after[A.index(i)]
return answer
다른사람들꺼 보니까 깔끔하게 잘푼듯 ㅎ
실패율 (2019 KAKAO BLIND RECRUITMENT)
def solution(N, stages):
stages.sort()
stage = list(range(1,N+2)) # 1층부터 N+1층까지 클리어 인원
clear = [0 for i in range(N+1)]
table = dict(zip(stage,clear)) # 층수:클리어인원
p = len(stages) #도전인원
for i in stages : # 스테이지 실패인원, N+1층은 전부 클리어
table[i] += 1
fail = []
for i in range(1,N+2): # ㅅ
if p==0 : # 모두 탈락했으면 뒤 스테이지 실패율 0
for i in range(N+1-len(fail)):
fail.append(0)
break
else : # 실패율 구하기
fail.append(table[i]/p)
p -= table[i]
fail_table = dict(zip(stage,fail))
temp = sorted(fail_table.items(), key=lambda x:x[1], reverse=True) # 높은거부터 정렬해주고
answer = []
for i in range(len(temp)):
answer.append(temp[i][0])
if N+1 in answer : # 전부 클리어 한 인원은 실패율 리스트에서 제거
answer.remove(N+1)
return answer
람다 표현식 연습중인데 좋네용
실패율 0 나오는 케이스 고려해야하는 문제
약수의 개수와 덧셈
def solution(left, right):
arr = list(range(left,right+1))
answer = sum(arr)
for i in range(int(arr[0]**(1/2)),int(arr[-1]**(1/2))+1): # 제곱수찾기
if i**2 in arr:
answer -= 2*(i**2)
return answer
약수의 합
def solution(n):
temp = [i for i in range(n,0,-1) if n%i==0]
answer = sum(temp)
return answer
옹알이
def solution(babbling):
replace = ['A','W','M','Y']
word = ['aya','woo','ma','ye']
temp = []
for i in babbling:
i = i.replace(word[0],replace[0])
i = i.replace(word[1],replace[1])
i = i.replace(word[2],replace[2])
i = i.replace(word[3],replace[3])
temp.append(list(i))
count = 0
for i in range(len(temp)) :
exam = True
for j in range(len(temp[i])) :
if temp[i][j] not in replace : # 4단어 아니면
exam = False
elif temp[i][j] in replace :
if j!=0 and temp[i][j] == temp[i][j-1] :
exam = False
if exam == True :
count += 1
return count
babbling 길이가 짧아서 모든 단어 치호나해서 풀기.
이전 단어랑 똑같거나 4단어 리스트에 없으면 카운트 x
이상한 문자 만들기
def solution(s):
answer = ''
temp = s.split(' ')
for i in range(len(temp)):
for j in range(len(temp[i])):
if j%2 == 0:
answer += temp[i][j].upper()
else :
answer += temp[i][j].lower()
if i != len(temp)-1 :
answer += ' '
return answer
완주하지 못한 선수
def solution(p,c):
if set(c)!=set(p):
answer = list(set(p)-set(c))[0]
else:
p.sort()
c.sort()
for i in range(len(c)):
if p[i] != c[i]:
answer = p[i]
break
return answer
예산
def solution(d, budget):
d.sort()
if sum(d) <= budget :
return len(d)
else :
for i in range(1,len(d)+1):
if sum(d[:i]) > budget :
return i-1
자릿수 더하기
def solution(n):
x = [int(i) for i in str(n)]
answer = sum(x)
return answer
자연수 뒤집어 배열로 만들기
def solution(n):
answer = []
a = str(n)
for i in range(1,len(a)+1):
answer.append(int(a[-i]))
return answer
정수 내림차순으로 정렬하기
def solution(n):
a = str(n)
temp = list(a)
temp.sort(reverse=True)
answer = ''
for i in temp:
answer += i
return int(answer)
join쓰기
정수 제곱근 판별
def solution(n):
if n**(1/2)-int(n**(1/2)) != 0 :
return -1
else :
return (n**(1/2)+1)**2
직사각형 별찍기
a, b = map(int, input().strip().split(' '))
for i in range(b):
print('*'*a)
제일 작은 수 제거하기
def solution(arr):
if len(arr) == 1 :
return [-1]
else :
arr.remove(min(arr))
return arr
짝수와 홀수
def solution(num):
if num%2==0:
answer = 'Even'
else :
answer = 'Odd'
return answer
추억점수
def solution(name, yearning, photo):
score = []
for i in range(len(photo)):
score_sum = 0
photo_set = set(name)&set(photo[i]) # 사진 마다 겹치는사람
photo_list = list(photo_set)
for j in range(len(photo_list)):
score_sum += yearning[name.index(photo_list[j])]
score.append(score_sum)
return score
체육복
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)
리스트를 사용해도 상관 없는데 구현이 조금 더 복잡해지고
학생 수가 충분히 많을때도 해시를 사용한 set 기반이 훨씬 동작하기 좋다
최대공약수와 최소공배수
def solution(n, m):
for i in range(min(n,m),0,-1): # 최대공약수
if (n%i==0) and (m%i==0): # 공통인수는 n,m 작은거부터 시작
temp_max = i
break
for i in range(max(n,m),(n*m)+1): #최소공배수 : 최대 nm까지
if i%n == 0 and i%m == 0:
temp_min = i
break
return [temp_max,temp_min]
최소직사각형
def solution(a):
temp = [0,0]
for i in range(len(a)):
a[i].sort(reverse=True)
if i == 0 :
temp[0],temp[1] = a[i][0],a[i][1]
else: # 정렬된 배열이랑 비교
if temp[0] < a[i][0]: # 새로운 배열이 더 크면 할당
temp[0] = a[i][0]
print(temp)
if temp[1] < a[i][1]:
temp[1] = a[i][1]
answer = temp[0]*temp[1]
return answer
카드뭉치
def solution(card1,card2,goal):
for i in range(len(goal)):
if len(card1) and goal[i] == card1[0] : # card 안비어있고 goal에 있으면
card1.pop(0)
elif len(card2) and goal[i] == card2[0] :
card2.pop(0)
else:
return 'No'
return 'Yes'
콜라츠 추측
def solution(num):
count = 0
if num == 1 :
return 0
while True :
if num%2 == 0 :
num = num/2
count += 1
else :
num = 3*num + 1
count += 1
if num == 1 :
return count
break
if count == 500 :
return -1
콜라 문제
def solution(a, b, n):
count = 0
while a <= n :
p,q = n//a,n%a # 낼거,나머지
count += p*b
n = p*b + q
return count
크기가 작은 부분 문자열
def solution(t, p):
window = len(p)
count = 0
th = int(p)
for i in range(len(t)-window+1):
if int(t[i:i+window]) <= th :
count += 1
return count
크레용 인형뽑기 (2019 카카오 개발자 겨울 인턴십)
def solution(a,move):
arr = []
for i in range(len(a)):
temp = []
for j in range(len(a[0])):
if a[j][i] != 0:
temp.append(a[j][i])
arr.append(temp)
choose = []
count = 0
for i in move:
if arr[i-1] == [] : # 집을거 없으면 다음
continue
else : # 집을거 있으면
if choose == [] : # 보관함 비었으면
choose.append(arr[i-1][0])
arr[i-1].pop(0)
else : # 보관함 안비었으면
if choose[-1] == arr[i-1][0] : # 보관함 맨 위랑 뽑은거 같으면
choose.pop(-1)
arr[i-1].pop(0)
count += 2
else : # 다르면 보관함에 추가
choose.append(arr[i-1][0])
arr[i-1].pop(0)
return count
키패드 누르기 (카카오 인턴)
def solution(number, hand):
left_use,right_use,center_use = [7,4,1],[9,6,3],[0,8,5,2]
left_xy = dict(zip(left_use,[[1,2],[1,3],[1,4]]))
right_xy = dict(zip(right_use,[[3,2],[3,3],[3,4]]))
center_xy = dict(zip(center_use,[[2,1],[2,2],[2,3],[2,4]]))
finger = [[1,1],[3,1]] # 처음 손가락 위치 [finger_left,finger_right]
temp = [] # 출력문자열
for i in number : # 문자입력받고
if i in left_use:
temp.append('L')
finger[0] = left_xy.get(i)
elif i in right_use:
temp.append('R')
finger[1] = right_xy.get(i)
else: # 가운데 있으면 거리비교하기
dl = abs(finger[0][0]-center_xy.get(i)[0])+abs(finger[0][1]-center_xy.get(i)[1])
dr = abs(finger[1][0]-center_xy.get(i)[0])+abs(finger[1][1]-center_xy.get(i)[1])
if dl < dr : # 거리비교하고 L 가까우면
temp.append('L')
finger[0] = center_xy.get(i)
elif dl > dr : # R가까우면
temp.append('R')
finger[1] = center_xy.get(i)
else : # 같으면 손 따라서
if hand == 'left':
temp.append('L')
finger[0] = center_xy.get(i)
else:
temp.append('R')
finger[1] = center_xy.get(i)
answer = "".join(temp)
return answer
키패드 1~4층 만들고 현재 손가락 좌표, 다음 입력 번호의 위치 이용해서 풀이
평균 구하기
def solution(arr):
answer = sum(arr)/len(arr)
return answer
폰켓몬
def solution(nums):
take = len(nums)/2
num_set = set(nums)
num_list = list(num_set)
if len(num_list) < take :
return len(num_list)
else :
return take
푸드 파이트 대회
def solution(food):
p = [] # p에 한 사람이 먹을 개수 체크
for i in range(1,len(food)):
p.append(food[i]//2)
temp1=[]
for j in range(0,len(p)):
for i in range(0,p[j]):
temp1.append(j+1)
temp2 = temp1.copy()
temp2.sort(reverse=True)
temp3=[0]
result = temp1 + temp3 + temp2
answer = "".join(str(x) for x in result)
return answer
핸드폰 번호 가리기
def solution(a):
b = list(a)
answer = list("*"*(len(a)-4)) + b[-4:]
answer = ''.join(answer)
return answer
햄버거 만들기
def solution(ingredient):
burger = [1,2,3,1]
answer = 0
temp = []
for i in ingredient:
temp.append(i)
if temp[-4:] == burger :
answer += 1
del temp[-4:]
return answer
행렬의 덧셈
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
temp = []
for j in range(len(arr1[0])):
temp.append(arr1[i][j]+arr2[i][j])
answer.append(temp)
return answer
zip 생각이 바로 나는데 아직은 덜 익숙해서 바로푸는게 좀 더 빠르다
K번째 수
def solution(array, commands):
answer = []
for i in range(len(commands)):
temp = array[commands[i][0]-1:commands[i][1]]
temp.sort()
a = commands[i][2]-1
answer.append(temp[a])
return answer
x만큼 간격이 있는 n개 숫자의 합
def solution(x, n):
answer = []
for i in range(1,n+1):
answer.append(x*i)
return answer
2016년
def solution(a, b):
month = [i for i in range(13)]
day = [0,31,29,31,30,31,30,31,31,30,31,30,31]
week = ['THU','FRI','SAT','SUN','MON','TUE','WED']
return week[(sum(day[0:a])+b)%7]
3진법 뒤집기
def solution(n):
temp = ''
while n>0 :
temp += str(n%3)
n = n//3
answer = 0
for i in range(len(temp)):
answer += ((3**i)*int(temp[-(i+1)]))
return answer
후기
한 달 동안 프로그래머스 레벨1 클리어, 백준 브~실 합쳐서 70문제, 총 150문제 정도 풀었다.
처음 짰을 때는 잘 안써서 몰랐던 명령어들 숙지하느라 시간도 오래걸리고 검색도 많이 했는데, 한 달 동안 계속 푸니까 쉬운 코드들은 보고나서 어떻게 짜야할 지 대충 보이는 듯 하다. 코드도 현재 코드랑 비교하면 조금 더 깔끔해지긴 했다. 어렵지 않은 문제는 구현하는데도 시간이 단축된게 느껴져서 보람찼다.
문제는 한 눈에 안들어오는 문제들이나 케이스에 조건이 몇 개 걸려있어서 구현할 때 조건에 끼워맞추기 식으로 진행해서 코드가 더러워지는 문제가 발생 하는데 이를 초기에 잘 생각하고 구현해야 할 듯 하다. 그리고 자주 쓰이는 테크닉같은 경우도 숙지해야 할 듯 하다.
다음 목표는 프로그래머스 1단계 시간재서 다시 작성하고 이전 코드랑 비교, 프로그래머스 레벨 2 풀기, 백준 골드 달성
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 백준 - 14단계 집합과 맵 (0) | 2023.04.18 |
---|---|
[파이썬] 백준 - 13단계 정렬 (0) | 2023.04.17 |
[파이썬] 백준 - 10단계 기하: 직사각형과 삼각형 (0) | 2023.04.08 |
[파이썬] 백준 - 9단계 약수, 배수와 소수 (0) | 2023.04.08 |
[파이썬] 백준 - 7단계 2차원 배열 (0) | 2023.04.06 |
[파이썬] 백준 - 8단계 입출력과 사칙연산 (0) | 2023.04.05 |
[파이썬] 프로그래머스 레벨2 (0) | 2023.04.02 |
댓글