Two Pointer 8

[Python] 17609. 회문

문제 https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 풀이 과정 투 포인터 방식으로 풀었다. 두 개의 포인터를 맨 왼쪽과 맨 오른쪽에 놓고 한 칸씩 이동하면서 회문인지 유사회문인지 일반 문자열인지 판별하였다. 코드 # 회문인지 체크하는 함수 def check_palindrome(l, r): while l < r: if string[l] != string[r]: return False l += 1 r -= 1 return True t = int(input()) for _ in..

Algorithm/Baekjoon 2022.09.22

[Python] 소가 길을 건너간 이유 5

풀이 1 처음부터 탐색 n, k, b = map(int, input().split()) # n번까지의 번호가 붙은 횡단보도, k개의 신호등, 부서진 신호등 개수 b lights = [0 for _ in range(n+1)] # 신호등 표시 for _ in range(b): lights[int(input())] = 1 # 부서진 신호등 1로 표시 l = 0 answer = float('inf') # 최소 수리해야하는 신호등 개수 tmp = 0 # 수리해야하는 신호등 개수 임시로 담는 변수 for i in range(1, n+1): if lights[i]: # 부서진 신호등이라면 + 1 tmp += 1 if i - l == k: # k 개수 충족됐다면 if tmp < answer: # 고칠 신호등 개수 최소..

Algorithm/Baekjoon 2022.01.14

[Python] 14719. 빗물

h, w = map(int, input().split()) # 세로 길이 h, 가로 길이 w blocks_h = list(map(int, input().split())) # 블록의 높이들 l = 0 # 왼쪽 포인터 r = w-1 # 오른쪽 포인터 max_l = max_r = 0 # 왼쪽, 오른쪽의 각 블록의 최대 높이를 저장할 변수 rainwater = 0 # 고이는 빗물의 총량 while l < r: # 각 블록의 최대 높이 갱신 max_l = max(max_l, blocks_h[l]) max_r = max(max_r, blocks_h[r]) if max_l < max_r: # 오른쪽 블럭이 더 큰 경우 rainwater += max_l - blocks_h[l] # 왼쪽 블럭을 기준으로 빗물 계산 l ..

Algorithm/Baekjoon 2022.01.01

[Python] 9020. 골드바흐의 추측

# 에라토스테네스의 채로 소수인지 판별 해놓기 is_prime = [True for _ in range(10001)] for i in range(2, 10001): if i*i > 10000: break if not is_prime[i]: continue for j in range(i*i, 10001, i): is_prime[j] = False tc = int(input()) for _ in range(tc): N = int(input()) s = N//2 # 반으로 쪼개기 e = N//2 # 같은 수 두번 더했는데 답인 경우 if is_prime[N//2]: if s + e == N: print(s, e) else: # 포인트 두개로 한칸씩 옮겨주며 답을 찾는다. 왜냐면 중간에서 같은 차이만큼 떨어져 ..

Algorithm/Baekjoon 2021.09.14