본문 바로가기
반응형

전체 글199

[프로그래머스] 바탕화면 정리 Python 풀이 문제 문제가 매우 길어서 링크로 대체하고 설명을 쓰겠다. https://school.programmers.co.kr/learn/courses/30/lessons/161990 바탕화면에 파일이 여러 개 있는데 이를 한 번에 묶을 수 있는 최단 루트를 구해서 좌측상단, 우측하단의 좌표를 구하면 된다. 구현 문제를 그대로 따라가면서 시간복잡도를 최소화하려면 구현이 복잡해진다. 좌측 상단에서 거리가 0인 포인트 부터 시작해서 파일을 찾아야 한다. [0,0] [1,0], [0,1] ...... 이렇게 해서 아래와 오른쪽에 동시에 있다면 그 점을 넣고 우측하단에서도 같이 하면 된다. 하지만 이 문제는 레벨 1이라 파일 위치가 복잡하지 않기 때문에 모든 파일을 찾아서 모두 x,y좌표가 들어있는 배열에 더해주고 최대,.. 2023. 4. 6.
[프로그래머스] 덧칠하기 Python 풀이 문제 구현 문제가 꽤 긴데 사실 입출력 예를 보면 매우 간단한 문제다. 처음 색칠 안된칸부터 색칠해서 롤러를 칠하고 그 롤러의 길이 뒤부터 색칠이 안된곳을 찾아서 다시 칠해주면 된다. 코드 def solution(n, m, section): result=0 i=0 section = set(section) while i 0: temp = section[0] + m while len(section) != 0 and temp > section[0]: section.pop(0) answer += 1 return answer 벽 길이가 짧고 칠할게 많을 때는 원래 풀이가 좋지만 길이가 매우 길고 칠할구역이 적을 때 더 효율적인 코드라고 생각해서 써보았다. 칠할 구역이 남아있을 때까지를 while조건으로 잡고 se.. 2023. 4. 6.
[프로그래머스] 과제 진행하기 Python 풀이 문제 구현 이 문제는 따로 쉽게 푸는 방법이 없는 것 같아 문제를 그대로 따라가면서 구현을 하면 된다. 우선 기본적으로 plans를 시간순서로 sorting 한 후 시작하는 게 좋다. 코드 def solution(plans): plans = sorted(plans, key=lambda x : x[1]) todostack = [] answer = [] nowtime = 0 beforetime = -1 for i in range(len(plans)): h,m = plans[i][1].split(':') plans[i][1] = int(h)*60+int(m) if i>0: remainingTime = plans[i][1] - plans[i-1][1] if remainingTime - int(plans[i-1].. 2023. 4. 6.
[프로그래머스] 연속 펄스 부분 수열의 합 Python 풀이 문제 구현 sequence에 [-1, 1, -1, 1......] 을 곱한 pulse배열과 sequence에 [1, -1, 1, -1......] 을 곱한 revpulse배열을 준비한다. 여기서 편의를 위해 accumulate 함수를 사용할 건데 배열을 돌며 이전 값에 따른 처리(기본 덧셈)를 해주는 함수이다. 코드 부분에서 추가로 설명하겠다. 그렇게 되면 각 배열 인덱스에 더해진 값이 있을건데 그중의 max값을 리턴하면 된다. 코드 from itertools import accumulate def solution(sequence): pulse = [((-1)**(i%2))*sequence[i] for i in range(len(sequence))] revpulse = [i*-1 for i in puls.. 2023. 3. 24.
반응형