본문 바로가기

Python

프로그래머스 구명보트 def solution(people, limit): people.sort() #정렬 length=len(people) #사람 수 i=0 #가벼운 사람의 인덱스 heavy=length-1 #무거운 사람의 인덱스 count=0 #짝 지은 수 while(i
프로그래머스 조이스틱 문제 이해하는 것도 좀 어려웠지만... 탐욕법(그리디 접근 방식)으로 저걸 어떻게 풀라는 지 생각도 안났다. 고민하다가 왼쪽으로만 이동하는 것과 오른쪽으로만 이동하는 것 그리고 왼쪽과 오른쪽 섞어서 이동하는 것 중에 최단 거리를 택하면 되겠다고 생각했다. 생각만 했고 구현하는 건 힘들었다.. 왼쪽과 오른쪽 섞어서 이동할 때 어떤 지점에서 다시 인덱스 0까지 돌아가야할 지 몰랐다. 인덱스 0부터 가운데까지 양방향으로 이동하면서 A가 아닌 알파벳이 나오면 leftDist, rightDist에 각각 거리를 넣었다. 이후 작은 값을 기준으로 돌게 되면 이동 거리가 최소화 된다. 둘 중 작은 거리 * 2 + 긴 거리를 하면 양 방향으로 이동했을 때 최단 거리가 나오게 된다. 물론 이 값과 왼쪽만으로 이동한 거리와..
프로그래머스 예상 대진표 처음엔 n을 반으로 나누고 그 n을 기준으로 양쪽에 a,b가 있으면 그때부터 num을 반으로 나누면서 count를 세고 1이 되면 count를 반환했다.시간이 오래 걸리거나 틀렸다. 실패 - 런타임 에러...#주어진 길이 n을 2로 나누면서 n이 a,b사이에 있을 때 계산하기. def solution(n,a,b): count=0 while True: if an: num=n while True: count+=1 if num==1: return count else: num//=2 else: n //= 2 print(solution(8,4,7)) print(solution(8,3,7)) print(solution(16,1,14)) 단순히 a,b를 노가다로 나누다가 a,b가 같아지면 결국 만난 거니까 그때까지의..
프로그래머스 소수 만들기 주어진 배열에서 3개의 숫자를 합한 뒤 이게 소수인지 판별하고 몇 개의 소수가 만들어질 수 있는지 출력해야 한다.배열에서 3개의 수를 어떻게 빼야하는 지 감도 안왔다...for문 3개를 써서 조합을 만들어준다.findPrime에 숫자 3개의 합을 매개변수로 건내주고 s라는 숫자를 2부터 s-1까지의 숫자로 일일이 나눈다. 나누어 떨어지는 게 있으면 소수가 아니므로 False 반환, 나누어 떨어지지 않으면 True를 반환. 에라토스테네스의 체를 쓰려면 아마 2부터 3000까지의 소수를 구하고 배열에 집어 넣은 뒤 일일이 비교하면 될 것 같다. def findPrime(s): for i in range(2,s): if s%i==0: return False return True def solution(nums..
프로그래머스 폰켓몬 주어진 폰켓몬들은 nums다. 이것의 절반까지 폰켓몬들을 선택할 수 있다. 최대한 많은 종류의 폰켓몬을 선택해야한다.mon 배열에 False 원소를 20만개 넣는다. 주어진 폰켓몬의 종류 번호를 인덱스 삼아 mon 배열에 True를 넣는다.mon배열에 있는 True의 총 갯수를 세면 폰켓몬의 종류 수가 나온다.폰켓몬의 종류가 주어진 폰켓몬 수의 절반 이상이라면 어차피 최댓값은 N이므로 N을 반환한다.아니면 count를 반환한다. def solution(nums): N=len(nums)//2 mon=[False]*200000 count=0 for i in range(len(nums)): mon[nums[i]-1]=True for j in range(200000): if mon[j]==True: count+..
프로그래머스 다리를 지나는 트럭 다리의 길이만큼 q를 0으로 채운다.시간은 0초부터 시작다리가 있는 동안 반복매 루프마다 1초씩 더한다q의 맨 앞 값을 pop하는 이유는 트럭이 지나감을 표현하기 위해서다트럭 배열이 있다면 다리에 있는 트럭 무게+대기 중인 트럭 무게
프로그래머스 기능개발 progress 배열 안에 있는 각 값에 speeds 배열 안에 있는 각 값을 누적해주다가 progress 배열의 맨 앞에 있는 값이 100이상이 되면 count에 값을 1 올려주고 progress와 speeds에 있는 맨 앞의 값을 삭제한다.hundred 플래그를 사용한 이유는 while문을 돌면서 마구잡이로 answer 배열에 count를 삽입하지 않기 위해서다. 첫 while문에서 플래그는 False이지만 progress 배열에 값이 존재하면서 첫 값이 100이상이면 플래그는 True가 된다. 조건을 만족하지 않으면 while문을 빠져나온 뒤if hundred==True 문으로 가는데 플래그가 True면 그제서야 answer 배열에 count를 삽입하게 된다. def solution(progress..
프로그래머스 탑 배열의 오른쪽에서부터 시작.기준점은 x로 잡고 y로 하나씩 왼쪽 이동한다. 왼쪽에 있는 것이 기준점보다 크다면 신호를 받을 수 있으므로 신호를 보낸 x 인덱스로answer[x] = y+1을 해준다. 여기서 y는 신호를 받은 탑의 인덱스인데 첫 탑의 인덱스는 0이지만 문제 상의 위치는 1로 표시해야하므로 y를 넣어주는 게 아니라 y+1를 해야한다.신호를 받은 위치를 찾아서 answer 배열에 넣었으면 break를 해서 신호를 보내는 다음 탑을 기준점으로 하고 반복한다.def solution(heights): start=len(heights)-1 answer = [0]*len(heights) for x in range(start,0,-1): #print('x',x) for y in range(x-1,-1,-..