프로그래머스 132

[프로그래머스, 파이썬] 푸드 파이터 대회

풀이 칼로리에 따른 음식의 수를 담은 food를 순회하면서 li라는 배열에 음식의 수//2를 한 몫의 수 만큼 인덱스를 곱한 문자를 추가 이후 s에 배열에 담긴 문자들을 합친 다음 물인 0을 추가하고 이후 s를 거꾸로 추가하여 해결 def solution(food): li = [] for i in range(1,len(food)): if food[i]//2: li.append(str(i)*(food[i]//2)) s = "".join(li) return s+"0"+s[::-1]

알고리즘 2024.03.14

[프로그래머스, 파이썬] 문자열 내 마음대로 정렬하기

풀이 해당 문제는 특정 규칙에 따른 정렬하는 것으로 인덱스 n에 따른 정렬과 같은 문자의 경우엔 해당 문자에 대한 앞순서로 정렬하는 문제이기에 lambda를 사용하여 첫 번째로는 x의 n번째에 해당하는 인덱스 규칙 적용 후 같다면 문자 x 순서에 따라 정렬한 것으로 해결 def solution(strings, n): return sorted(strings, key= lambda x:(x[n],x))

알고리즘 2024.03.14

[프로그래머스, 파이썬] 땅따먹기

풀이 해당 문제는 DP를 활용한 문제로 해당 유형의 DP는 자주 사용하는 방식이기에 꼭 기억하고 있으면 좋다. for을 활용하여 1번째 인덱스의 land 위치에서 이전 값에서 현재 j의 인덱스 위치가 아닌 값들 중 가장 큰 값을 현재 값에 누적합하여 최종적으로 마지막 land의 배열 중 가장 큰 값을 전달하여 해결하는 방법 def solution(land): for i in range(1,len(land)): for j in range(4): land[i][j] += max(land[i-1][:j]+land[i-1][j+1:]) return max(land[-1])

알고리즘 2024.03.13

[프로그래머스, 파이썬] 명예의 전당 (1)

풀이 해당 문제는 명예의 전당에 있는 점수 중 최저점을 결과로 출력하는 것이기에 heapq를 사용하면 좋을 것 같다는 생각을 했다. 그래서 li를 초기값으로 -1로 준 다음 heapq로 변경한 다음 score 길이 만큼 반복하여 현재의 점수가 li에 있는 최소값 보다 클 경우 추가하고 heapq에 최소값을 빼고 현재 점수를 추가하는 형식으로 했으며 여기서 num은 i가 k보다 작을 경우 초기값인 -1로 계속 들어올 것이기에 num을 넣어 해결 해당 문제에서 이상하게 9,11번이 런타입 에러가 발생해서 어떤 문제일까 고민을 했는데 k가 score의 길이보다 큰 경우에 대해서 처음에 생각하지 못했던 것이었다. import heapq def solution(k, score): result = [0]*len(s..

알고리즘 2024.03.13

[프로그래머스, 파이썬] 주식가격

풀이 단순하게 접근해본 풀이와 스택을 활용한 풀이 두 가지 유형의 풀이 중 첫 번째 풀이는 단순하게 접근한 풀이로 li에는 현재 위치로 부터 앞으로 있을 거리에 대한 배열 이후 반복문을 활용하여 해당 값보다 작은 값이 있을 경우 카운팅한 것을 배열에 추가 후 탈출하여 해결 당연하지만 시간 복잡도가 상대적으로 올라갈 수 밖에 없으며, 다른 문제에선 이런 풀이는 통과되지 않을 듯하다. 그래서 두 번째 풀이로 스택으로 접근한 풀이인데 해당 풀이는 종종 나오는 것으로 이후의 값과 비교하려 할 경우 stack이라는 배열에 값이 있을 경우 마지막 값과 비교한 후 그에 따른 결과를 result에 적용하여 해결 다만 여기서 while문 또한 stack에 값이 있을 경우에 동작해야한다는 것을 기억하기. 첫 번째 풀이 d..

알고리즘 2024.03.12

[프로그래머스, 파이썬] 카드 뭉치

풀이 처음에는 goal과 cards의 요소가 같으면 goal과 cards에 해당 하는 문자를 모두 지우려 했는데 생각해보니 goal은 통과만 시키고 cards만 제거하면 되는 것 같아 코드가 간결해져 간단하게 해결 def solution(cards1, cards2, goal): for g in goal: if cards1 and g == cards1[0]: del cards1[0] elif cards2 and g == cards2[0]: del cards2[0] else: return "No" else: return "Yes"

알고리즘 2024.03.12

[프로그래머스, 파이썬] 2016년

풀이 2016년도의 특정 일에 대한 요일을 구하는 문제라서 1월1일이 금요일이라고 하여 찾아보니 실제로 맞는 요일이었다. 만약 다를 경우 연산을 조금 더 추가해서 적용하면 되는 것이기에 큰 문제는 없지만 같기에 수월했다. 그래서 파이썬 함수인 datetime을 가져온 다음 int 타입인 연도, 월, 일을 넣어주고 .weekday()+1 함수를 적용하게 되면 현재 요일에 대한 숫자가 return되기에 요일에 대한 배열을 만들어 출력하여 해결 from datetime import datetime def solution(a, b): weekend = ["SUN","MON","TUE","WED","THU","FRI","SAT"] return weekend[(datetime(2016,a,b).weekday()+1..

알고리즘 2024.03.12

[프로그래머스, 파이썬] 더 맵게

풀이 해당 문제는 heap을 사용해서 푸는 문제이지만 사용하지 않고 풀어보려고 했다가 효율성에서 에러가 나는 것을 확인하여 heap을 사용하기로 함 우선 heap에 대해 처음 사용하다보니 어떤 경우 사용하는지 알아보니 최소,최대 값을 확인할 경우 트리 구조로 찾다보니 빠르게 찾는 것 같다. 그래서 heapq을 import 한 다음 현재 s로 받아오는 배열을 heapq로 변환한 다음 heappush로 s 배열에 최소 값인 heappop()과 그 다음 값에 식을 적용하여 추가하기 그리고 변경되어진 s의 값 중 가장 작은 값이 K보다 크거나 같다면 return하고 만약 s의 길이가 2보다 작다면 더 이상 방법이 없기에 -1로 return하여 해결 import heapq def solution(s, K): st..

알고리즘 2024.03.11