알고리즘 150

백준 21921: 블로그 (Python)

https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net 투 포인터 이용 n, x = map(int, input().split()) visitors = list(map(int, input().split())) i = j = 0 temp = result = 0 cnt = 0 for i in range(n): # 끝 포인터 이동 while j-i < x and j < n: temp += visitors[j] j += 1 # x일 if j-i == x..

알고리즘/백준 2023.06.15

투 포인터 (Two Pointers)

투 포인터 리스트에 순차적으로 접근해야 할 때 2개의 점 위치를 기록하면서 처리 특정한 합을 가지는 부분 연속 수열 찾기 * 기본적으로 시작점을 오른쪽으로 이동시키면 항상 합이 감소하고, 끝점을 오른쪽으로 이동시키면 항상 합이 증가하기 때문에 투 포인터 알고리즘으로 해결할 수 있다. * 리스트 내 원소에 음수 데이터가 포함되어 있는 경우, 투 포인터 알고리즘으로 해결할 수 없다. n = 5 # 데이터의 개수 m = 5 # 찾고자 하는 부분합 data = [1, 2, 3, 2, 5] # 전체 수열 count = 0 interval_sum = 0 end = 0 # start를 차례대로 증가시키며 반복 for start in range(n): # end를 가능한 만큼 이동시키기 while interval_su..

알고리즘/정리 2023.06.13

백준 16918: 봄버맨 (Python)

https://www.acmicpc.net/problem/16918 16918번: 봄버맨 첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다. www.acmicpc.net n=0일 때: 폭탄 설치 n=1일 때: 그대로 n=2일 때~: 나머지 모든 칸에 폭탄 설치 -> 폭발 반복 r*c 크기의 bombs 배열을 모두 0으로 초기화하고, 초기 상태 배열을 입력받으면서 'O'인 부분은 2로 바꿔준다. (0초 - 1초 상태) i=2부터 n+1까지 for문을 돌려주면서 1. bombs 순회하면서 값을 하나씩 감소시키고, 2. i가 짝수일 때에는 모든 칸에 폭탄 설치 -> 0인 부분을 3으로 ..

알고리즘/백준 2023.05.02

백준 12933: 오리 (Python)

https://www.acmicpc.net/problem/12933 12933번: 오리 첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다. www.acmicpc.net 로직은 이러함.. 이때까지만 해도 쉬운 문제인 줄 알았지.. 첫 시도 (실패) sound를 차례대로 순회하면서 q -> u -> a -> c -> k 에 해당하면 넘어가고, 해당하지 않으면 temp 배열에 문자를 넣는다. 순회가 끝난 후 sound와 temp가 같다면 (q-u-a-c-k를 찾지 못한 경우) break해주고, 같지 않다면 sound = temp 후 정답을 하나씩 추가했다. sound = input() du..

알고리즘/백준 2023.04.14

[프로그래머스 | Lv3] 퍼즐 조각 채우기 (Python)

https://school.programmers.co.kr/learn/courses/30/lessons/84021 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 전체 로직 1. table -> 이어진 퍼즐 조각 부분만 잘라서 행렬로 만들어주고 board에 추가 2. game_board -> 이어진 빈 부분만 잘라서 행렬로 만들어주고 rotate하면서 각 수행문마다 board에 같은 값이 있는지 찾고 정답 추가 bfs(x, y, t, f, array, size) - 큐에 [x, y]를 넣고 이어진 부분을 찾는다. - table은 1을 찾아야 하고, game..

[프로그래머스 | Lv2] 조이스틱 (Python)

https://school.programmers.co.kr/learn/courses/30/lessons/42860 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 상하이동 더하기 (A-Z) - 아스키코드를 이용해 앞에서부터 더한 것과 뒤에서부터 더한 것 중 최솟값을 찾아준다. 2. 좌우이동의 최소 구하기 1) 'A'가 연속해서 나오는 위치를 찾아준다. - temp 리스트를 만들어서 연속된 인덱스들을 리스트로 묶어서 넣어줬다. 2) 기존 방식(앞으로 쭉 가기) / 앞으로 갔다가 뒤로 돌아가기 / 뒤로 갔다가 앞으로 돌아가기 중 최솟값 - 기존 방식(앞으..

[프로그래머스 | Lv3] 등굣길 (Python)

https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 0으로 초기화된 dp 배열을 만들어주고, 집이 있는 자리는 1로 만들어준다. 그 후 1행 -> 2행 -> ... 으로 반복문을 돌면서 (오른쪽, 아래쪽으로만 가기 때문에 옆으로 건너가면서 모든 경우의 수를 계산할 수 있다.) [x-1][y], [x][y-1]의 배열을 합한 값을 더해주면 된다. # 프로그래머스 42898: 등굣길 def solution(m, n, puddles): dp = [[0]..

[프로그래머스 | Lv2] 문자열 압축 (Python) - 2020 KAKAO BLIND RECRUITMENT

https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문자열 길이의 절반보다 큰 수로 문자열을 자르면 문자열 압축이 불가능하기 때문에 1부터 문자열 길이의 절반만 탐색한다. ==> 압축하는 문자열의 길이 (처음에 len(s)//2+1로 범위를 잡아줬다가 tc5에서 실패했다. 문자열의 길이가 1일 경우를 고려하여 +2를 해준다.) cnt(같은 문자열의 개수), result(압축된 문자열), temp(비교 문자열) 변수를 뒀다. i(압축하는 문자열의 길..

[프로그래머스 | Lv2] 괄호 변환 (Python) - 2020 KAKAO BLIND RECRUITMENT

https://school.programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 빈 문자열일 때 그대로 반환한다. 2. '('와 ')'가 같은 개수만큼 있으면 잘라서 u, v로 분리한다. (균형잡힌 괄호 문자열) 3. u를 복사한 리스트(tmp)를 생성해서 '()'를 빈 문자열로 교체해준다. 4. u가 올바른 괄호 문자열(tmp == '')이면 v를 재귀적으로 수행한 후 u + 재귀결과 붙여서 반환한다. 5. u가 올바른 괄호 문자열이 아니면 v를 재귀적으로 수행한 후 ..

[프로그래머스 | Lv2] 수식 최대화 (Python) - 2020 카카오 인턴십

https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 숫자(num), 연산자(op)를 분리해주고 연산자 우선순위 리스트(per)를 순열을 통해 만들어준다. per을 순서대로 돌면서 각 연산자에 대해 계산을 해주고, (연산자의 개수는 항상 숫자의 개수보다 하나 적음, 연산자의 idx -> 숫자[idx]와 숫자[idx+1]의 연산을 수행하면 됨) 각 우선순위에 따라 절댓값의 최댓값을 갱신해주면 된다. # 프로그래머스 67257: 수식 최대화 (2020 ..