programming language/Algorithm 82

[백준] 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개의 줄에는 표에 채워져 있는 ..

[백준] 20922 겹치는 건 싫어 python

겹치는 건 싫어 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 (추가 시간 없음) 1024 MB 9838 3568 2732 35.425% 문제 홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 �$K$개 이하로 들어 있는 최장 연속 부분 수열의 길이를 구하려고 한다. 100000$100\,000$ 이하의 양의 정수로 이루어진 길이가 �$N$인 수열이 주어진다. 이 수열에서 같은 정수를 �$K$개 이하로 포함한 최장 연속 부분 수열의 길이를 구하는 프로그램을 작성해보자. 입력 첫째 줄에 정수 �$N$ (1≤�≤200000$1 \le N \le 200\,000$)과 �$K$ (1≤�≤100$1 \le K..

Two Pointer 개념 정리

간단하게 두개의 인덱스를 이용해서 최적의 해를 구하는 것이다. 보통 start, end = 0, 0 으로 둔 뒤 end의 값을 늘려간다. 그리고 필요시 start += 1을 해주면서 두 인덱스 값을 조절한다. 특정한 합을 찾는 연속 수열 n, m = map(int, input().split()) graph = list(map(int, input().split())) for start in range(n): while result < m and end < n: result += graph[end] end += 1 if result == m: count += 1 result -= graph[start] print(count) 해당 문제에서는 모든 부분수열의 경우의 수를 다 확인하면서 찾는 공간을 사용해야한다..

[이코테] 음료수 얼려먹기 python

문제 풀이 이 문제는 BFS를 돌고 돌 수 있는 블럭의 개수를 구하는 것이다. 이중 For문으로 모든 이차원배열의 인덱스 bfs 돌리는데 이 때 방문하지 않는 값들만 count해준다. from collections import deque n, m = map(int, input().split()) graph = [] result = 0 for i in range(n): graph.append(list(map(int, input().split()))) def in_range(x,y): if x >= 0 and x = 0 and y

[백준] 13549 숨바꼭질3 python

숨바꼭질 3 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 512 MB 95995 24571 16415 24.222% 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수..

[백준] 17836 공주님을 구해라! python

공주님을 구해라! 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 256 MB 15291 3980 2958 24.220% 문제 용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는 무기로는 마법 벽을 통과할 수 없으며, 마법 벽을 피해 (N, M) 위치에 있는 공주님을 구출해야만 한다. 마왕은 용사를 괴롭히기 위해 공주에게 저주를 걸었다. 저주에 걸린 공주는 T시간 이내로 용사를 만나지 못한다면 영원히 돌로 변하게 된다. 공주님을 구출하고 프러포즈 하고 싶은 용사는 반드시 T시간 내에 공주님이 있는 곳에 도달해야 한다. 용사는 한 칸을 이동하는 데 ..

[백준] 완전탐색 22864, 18511, 15721, 1969 python

22864 완전탐색은 어느 범위로 for문을 돌아야할지 결정하는게 제일 중요하다. 하루에 최대 얼마나 일을 할 수 있는지 - => 하루 24시간으로 정했다. import sys input = sys.stdin.readline a, b, c, m = map(int, input().split()) tired = 0 work = 0 # 각 시간마다 피로도를 체크하고 안 넘었으면 계속 일하는게 최대인 것 같음 for i in range(24): # print(work, tired,"work, tired") if (a > m): break # 일 더 해도 되는지 체크 if (tired + a > m): # 더 할 경우 m 넘어간다 if (tired - c < 0): tired = 0 else: tired -= c..

[백준] 완전탐색 2231, 2798, 18312, 19532 python

2798 주어진 카드 중에서 3개를 고르는 경우의 수를 구해야한다. => 조합 from itertools import combinations for cards in combinations(graph, 3) # 카드의 합이 21을 넘지 않는 한도내에서 카드의 합을 최대한 크게 만드는 게임이다 # 첫째 줄에 카드의 개수 import sys from itertools import combinations # input = sys.stdin.readline() n, m = map(int, input().split()) graph = list(map(int, input().split())) graph.sort() result = 0 # 합이 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다 # N 개 ..

[백준] string 11365, 11720, 3029 python

11365 for문을 역순으로 돌리는 것 연습 for(처음, 끝, step) codeList = [] while(True): code = str(input()) if (code == 'END'): break codeList.append(code) codeLen = len(codeList) for c in codeList: for i in range(len(c)-1, -1, -1): print(c[i], end='') print() 11720 string을 int로 변환하는 것. int으로 묶으면 # n개의 숫자가 공백 없이 쓰여있다 result = 0 n = int(input()) ans = str(input()) for i in range(len(ans)): result += int(ans[i]) pr..

[프로그래머스] 아이템 줍기 python

https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 어려워. . . . 다시 풀어야 한다 1. 입력받은 직사각형의 좌표값으로 테두리만을 갖고 있는 2차원 배열 만들기 (1) 모든 좌표값은 2배로 만든다. ㄷ 모양을 ㅁ으로 착각할 수 있기 때문이다. (2) 각 직사각형의 x,y 폭만큼 이중 For문을 돌다가, 해당 값이 직사각형의 테두리쪽 안에 있으면 0 값을 넣고 테두리 쪽인 경우에만 1을넣는다. (2) 그다음 BFS.. field = ..