본문 바로가기

알고리즘

(138)
[백준 / 투 포인터] 1306 : 달려라 홍준 (python) 풀이 import sys input = sys.stdin.readline N, M = map(int, input().split()) A = list(map(int, input().split())) strong = 0 answer = [] # 시야 초기 max 값 설정 strong = max(A[:M*2-1]) answer.append(strong) i, j = 1, M*2-1 while j != N: if strong != A[i-1]: if strong < A[j]: strong = A[j] else: strong = max(A[i:j+1]) answer.append(strong) i+=1 j+=1 print(*answer) 정답은 strong 배열에 저장했고, 시간(1초)마다 보이는 홍준의 시야에서 ..
[백준 / 투 포인터] 2003 : 수들의 합 2 (python) 풀이 import sys input = sys.stdin.readline N, M = map(int, input().split()) A = list(map(int, input().split())) i,j,cnt,sum = 0,0,0,A[0] while j != N: try: if sum M: sum-=A[i] i+=1 else: cnt+=1 sum-=A[i] i+=1 j+=1 sum+=A[j] except IndexError: break print(cnt) 투 포인터는 2개의 포인터로 알고리즘의 시간 복잡도를 최적화한다. 위 문제의 시간제한은 0.5초인데, N, M의 범위 값이 각각 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,00..
[백준 / DP] 1253 : 좋다 (python) 문제 설명 문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) 출력 좋은 수의 개수를 첫 번째 줄에 출력한다. 예제 입력 1 10 1 2 3 4 5 6 7 8 9 10 예제 출력 1 8 힌트 3,4,5,6,7,8,9,10은 좋다. 풀이 import sys input = sys.stdin.readline N = int(input()) A = sorted(..
[백준 / 구간 합 구하기] 11660 : 구간 합 구하기 5 (python) 문제 설명 문제 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다. 예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자. 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다. 표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오. 입력 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채..
[백준 / 리스트] 25966 : 배찬우는 배열을 좋아해 (python) 문제 설명 문제 찬우는 오늘 프로그래밍 기초 강의에서 2차원 배열에 대해 배웠다. 너무 재미있던 찬우는 2차원 배열에다 연산을 진행하기로 결심했다. 아래와 같은 두 가지 종류의 연산이 쿼리로 주어진다. 0 i j k : i번 행의 j번 열의 값을 k로 바꾼다. 1 i j : i번 행과 j번 행을 swap한다. swap 이란 i번 행의 모든 원소와 j번 행의 모든 원소를 바꾸는 연산이다. q개의 쿼리를 수행한 후 바뀐 배열의 최종 결과를 출력하시오. 출력 q개의 쿼리를 전부 수행한 후의 2차원 배열을 출력한다. 예제 입력 1 4 3 4 # 행의 개수, 열의 개수, 쿼리 개수 10 3 8 # 2차원 배열 (4x3) 2 10 4 # 2차원 배열 (4x3) 1 8 4 # 2차원 배열 (4x3) 1 4 2 # 2..
[프로그래머스 코딩테스트 고득점 Kit / 탐욕법(Greedy)] 구명보트 (python) 풀이 def solution(people, limit): answer = 0 people.sort() frontIdx = 0 while people and frontIdx < len(people): leftLimit = limit leftLimit -= people.pop() answer += 1 try: if people[frontIdx]
[프로그래머스 코딩테스트 고득점 Kit / 탐욕법(Greedy)] 큰 수 만들기 (python) 풀이 1 : 조합 (실패) from itertools import combinations def solution(number, k): numList = list(number) data = list(range(0, len(numList))) maxNum = 0 answer = '' delete = list(combinations(data, k)) for row in delete: tempList = numList.copy() for i in row: tempList[i] = '' tempNum = int(''.join(tempList)) if maxNum < tempNum: maxNum = tempNum answer = str(maxNum) return answer 조합으로 삭제 가능한 모든 인덱스 조합을..
[프로그래머스 코딩테스트 고득점 Kit / 탐욕법(Greedy)] 조이스틱 (python) 풀이 def solution(name): answer = 0 minMove = len(name) - 1 for i, char in enumerate(name): answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1) next = i + 1 while next < len(name) and name[next] == 'A': next += 1 minMove = min([minMove, 2 * i + len(name) - next, i + 2 * (len(name) - next)]) answer += minMove return answer 모범답안 참고 연속된 A를 찾고 이에 따른 최소 이동 길이를 찾으면 된다. enumerate를 사용하면 index와 배..

반응형