본문 바로가기

프로그래머스66

프로그래머스 Lv2 짝지어 제거하기 (python) 짝지어 제거하기 풀이 처음에는. replace의 방법으로 풀었는데 너무 시간이 오래 걸렸다. 도저히 무슨 방법을 써야 하지 답이 생각이 안 났는데, stack 방법을 찾게 되어서, stack을 이용해서 새로 풀었다. 효율성 검사에서 시간이 걸려, 조마조마했지만 다행스럽게 통과되었다. stack을 이용하되, pop()과 append()를 사용하게 되면 시간이 더 오래 걸릴 것이라 판단해서 top을 이용해서 문제를 풀었다. 다행히 몇 번의 반복문 없이 for문 한 번만 돌리면 문제가 해결되어서 더 골머리 앓지 않아도 되어서 다행이다. # stack 이용 def solution(s): stack = [0] * 1000001 # top을 이용해서 시간 줄이기 top = -1 for i in range(len(s.. 2024. 2. 5.
프로그래머스 Lv2 멀리 뛰기 (python) 멀리 뛰기 풀이 처음엔 재귀로 했으나, 이번에도 maximum에 걸렸다. dp를 이용했다. 현재 칸의 경우의 수는 1칸 전과 2칸 전의 경우의 수를 합친 것과 같다는 것에 기인했다. 그러니 아래처럼 코드가 나왔따. def solution(n): # n번 칸에 도착할 수 있는 경우의 수는 1칸 전에서의 경우의 수와 2칸 전의 경우의 수를 더한 것. dp = [0,1,2] + [0] * 1998 for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] % 1234567 다른 사람 풀이 다들 비슷비슷하게 풀었다. def solution(n): dp = [0]*2002 dp[1], dp[2] = 1, 2 for i in range(3, n+1): dp[i].. 2024. 2. 4.
프로그래머스 Lv2 피보나치 수 (python) 피보나치 수 풀이 처음엔 재귀함수로 시도해 봤으나, 시간도 오래 걸리고, maximum deepth 에러가 생겨서 실패했다. 그래서 while문을 이용해봤고 아래처럼 진행을 했다. 1. F=[0,1,2] 변수를 생성 2. n = 2일 때는 1을 반환시키고 이게 아니라면, while문에 입장 3. i변수를 이용해서 n과 동일해질때의 값을 반환할 수 있게 제약 걸고, while문 내에서는 F.append() 대신 [0], [1], [2]를 계속해서 바꿔주는 방식으로 이용. 이유 append()도 은근히 시간이 걸리는 녀석임 4. while문을 벗어나면 F[2] 즉, n번째가 되는 값을 1234567로 나눈 나머지를 반환. 이때 n번째는 0번째부터 새는 n번째. def solution(n): F = [0, 1.. 2024. 2. 4.
프로그래머스 Lv2 의상 (python) 의상 풀이 처음엔 모든 경우의 수를 구하기 위해, 재귀함수를 이용해 모든 옷을 입을 수 있는 방법을 구하도록 하였다. 방법에는 문제가 없는 것으로 보이나, 시간이 너무 오래 걸리게 되어 실패했다. # 코니는 매일 다른 옷을 조합. 종류별, 1가지 의상만 착용 # 다른 의상이 겹쳐도, 다른 의상이 겹치지 않거나 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 착용한 것. # 코니는 하루에 최소 한 개의 의상 # 변수 설정 answer = 0 clothes_kind = [] # 옷을 입는 방법을 추가 # puton(clothes_dict, 착용갯수, 착용 의상 인덱스, 입은 의상 리스트) def puton(clothes_dict, i, j, put_cloth): global answer # 입은 의상 .. 2024. 2. 4.
프로그래머스 Lv2 전화번호 목록 (python) 전화번호 목록 풀이 처음방법으로 풀었을 때, 잘 넘어갔지만, 효율성에서 문제가 생겼었다. # 전화번호 부의 한 번호가 다른 번호의 접두어인 경우가 있는지 확인 # 있으면 False, 없으면 True # .startswith()를 활용 def solution(phone_book): phone_book_sort = sorted(phone_book) for i in range(len(phone_book)): for j in range(i+1, len(phone_book)): if phone_book_sort[j].startswith(phone_book_sort[i]): return False return True 그래서 보다 보니 내가 사용하기 위해 phone_book 이미 정렬을 해둔 게 있다. 정렬을 해뒀.. 2024. 2. 3.
프로그래머스 Lv2 N-Queen (python) N-Queen 풀이 재귀함수를 이용해줬다. 사실 예전에 자력으로 풀었었는데, 지금은 어떻게 풀어야하는지 잊어버려서 골골대다가 예전에 풀었던 것을 참고해서 풀었다. 많이 풀고 또 많이 풀고 또 많이 풀어서 예전 보다 더 좋은 실력을 가져야지. 우선 프로그래머스는 함수형으로 문제를 풀어야되기 때문에 solution()밖에 변수를 설정한다. soultion()에서 n을 받아옴과 동시에 global을 이용해서 설정한 변수의 값을 변경한다. n queen을 재귀함수로 사용할 수 있는 함수를 따로 만들어주고, 이 때 맨 처음 만날 조건으로 row == n 즉, 모든 행에 다 퀸을 놓았으면 count +1 해주는 조건을 걸어주고 시작한다. 그 외에는 각 행별로 열을 돌아가며, 퀸을 놓을 수 있는지를 판단, 된다면, .. 2024. 2. 3.