프로그래머스 풀이 33

프로그래머스 모의고사(파이썬)

처음에 비교하는 거는 익숙해서 잘됐는데 처음에 반복되는 배열을 어떤크기로 정의할지, 마지막에 가장 많이 맞춘 애들을 어떻게 정렬해서 리턴할지가 고민이 됐었다. def solution(answers): answer = [] a = [0]*3 #인덱스 i+1번째 수포자가 맞춘개수 num1 = [1,2,3,4,5]*(len(answers)//5+1) num2 = [2,1,2,3,2,4,2,5]*(len(answers)//8+1) num3 = [3,3,1,1,2,2,4,4,5,5]*(len(answers)//10+1) #어짜피 len(answer)만큼 돌릴것이기 때문에 넉넉하게 for i in range(len(answers)): if num1[i]==answers[i]: a[0]+=1 if num2[i]==a..

프로그래머스 소수만들기(파이썬)

앞의 에라토스테네스의 체를 모르면 다른 방법으로 풀어야 한다. 소수 판별하는 다른 프로그래머스 문제에서 에라토스 테네스의 체를 보여드렸으니 이제 이를 활용해 약간의 응용문제를 해결해 보았다. def solution(nums): answer = 0 a=[1]*3001 # 인덱스가 소수면 1 아니면 0. 디폴트 값은 1 a[0]=0 #0은 자연수가 아님 a[1]=0 #1은 소수가 아님 for i in range(2,len(a)-1): if a[i]==0: continue for j in range(2,len(a)//i+1): a[i*j]=0 #에라토스테네스의 체 for i in range(len(nums)-2): for j in range(i+1,len(nums)-1): for k in range(j+1,l..

프로그래머스 크레인 인형뽑기 게임(파이썬)

처음엔 시간 초과가 나왔다. 그래서 위의 이중 for문 내에서 조건을 걸어 모두 처리하려 했고 성공했다. def solution(board, moves): answer = 0 a=[] #바구니 배열 cnt=0 #1개도 꺼내지 않는 경우 for i in moves: for j in range(len(board[i-1])): if board[j][i-1]==0: #꺼내려는 칸이 비어있을 때 if j==len(board[0])-1: cnt+=1 #꺼내려는 마지막 칸이 비어있을 떄 continue #꺼내려는 칸이 비어있을 때 continue else: a.append(board[j][i-1]) #케릭터가 있으면 바구니에 담기 board[j][i-1]=0 #해당 배열 값은 0으로 바꿔줘서 다시 선택이 안되게끔 함..

프로그래머스 키패드 누르기(파이썬)

좌표로 번호판을 생각한다는게 어려웠다. 무엇보다 꼼꼼히 구현을 해야하는 문제 def solution(numbers, hand): answer = '' dic = {1: [0,0], 2:[0,1], 3:[0,2], 4:[1,0], 5:[1,1], 6:[1,2],7:[2,0],8:[2,1],9:[2,2],\ '*':[3,0],0:[3,1],'#':[3,2]} #좌표별로 나누기 left_n = dic['*'] #왼손 시작 right_n = dic['#'] #오른손 시작 for i in numbers: now = dic[i] #가고자 하는 위치 if i ==1 or i==4 or i == 7: answer+='L' left_n =now #무조건 왼손 elif i ==3 or i == 6 or i == 9: an..

프로그래머스 신규아이디 추천(파이썬)

카카오 2021 블라인드 문제로 나왔었다. 그냥 시키는 대로 구현하면 되는 쉬운 문제지만 꼼꼼하게 하지 않으면 인덱스 오류같은 오류가 난다. 자세한건 주석으로 설명했다. def solution(new_id): answer = '' new_id=new_id.lower() #소문자로 # print(new_id) for i in range(len(new_id)): #특정문자 외 제거 if new_id[i].isalpha() or new_id[i].isdigit() or new_id[i] in ["-", "_", "."]: answer+=new_id[i] # print(answer) while ".." in answer: # .. 를 .로 answer = answer.replace("..",".") if ans..

프로그래머스 소수찾기(파이썬)

에라토스테네스의 체를 이용하는 문제. 모든 수를 소수라 하고 소수를 1로 a배열에 저장해두고 소수의 배수들은 모두 소수가 아니다라는 개념을 이용한 dp. 소수를 1로 둬서 소수의 개수를 찾기도 쉽다. def solution(n): answer = 0 a=[1]*(n+1) # 소수면 1 a[0]=0 a[1]=0 for i in range(2,n+1): if a[i]==0: continue for j in range(2,n//i+1): a[i*j]=0 answer = sum(a) #소수 개수의 총합 return answer

프로그래머스 체육복(파이썬)

이 문제의 경우 풀이는 매우 간단하나 딱 풀이를 떠올려서 구현하기가 너무 힘들다. 그리고 왼쪽에 있는 학생한테 먼저 빌려줘야 하는것도 키포인트 def solution(n, lost, reserve): a= set(lost)-set(reserve) b= set(reserve)-set(lost) #lost와 reserve 중복제거 for i in b: #체육복을 빌려줄 수 있을 때 if i-1 in a: #그 전 번호부터 확인해 봐야한다. 빌려줄 수 있을 때. a.remove(i-1) elif i+1 in a: #그 다음 번호한테 빌려줄 수 있을 때 a.remove(i+1) return n-len(a)