구현 43

[백준] 16139 인간 (Python 파이썬)

https://www.acmicpc.net/problem/16139 16139번: 인간-컴퓨터 상호작용 첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째 www.acmicpc.net 문제 설명 특정 문자열 S, 특정 알파벳 α와 문자열의 구간 [l,r]이 주어지면 S의 l번째 문자부터 r번째 문자 사이에 α가 몇 번 나타나는지 구하는 프로그램을 작성하자. 문자열의 문자는 0번째부터 세며, l번째와 r번째 문자를 포함해서 생각한다. 풀이 과정 이 문제는 누적 합 으로 풀어야 시간초과 없이 해결할 수 있다. 만약, 매번 l부터 r..

[백준] 2559 수열 (Python 파이썬)

https://www.acmicpc.net/problem/2559 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 문제 설명 그림과 함께 제공되는 문제이니 자세한 문제설명은 위 링크를 참조해주세요. 풀이 과정 이 문제는 누적 합 으로 푸는 문제이다. 누적합을 이용하지 않고 단순 합계를 이용한다면 시간초과 오류가 나게 된다. 한번 구간합을 구하는 시간복잡도는 O(n)이고 m번동안 수행을 하게 된다면 총 시간복잡도는 O(nm)이 되는데 데이터가 10만개가 되면 시간초과 오류가 나게 된다. 그래서 매번..

[백준] 11659 구간 합 구하기4 (Python 파이썬)

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 문제 설명 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 풀이 과정 이 문제는 누적 합 으로 푸는 문제이다. 누적합을 이용하지 않고 단순 합계를 이용한다면 시간초과 오류가 나게 된다. 한번 구간합을 구하는 시간복잡도는 O(n)이고 m번동안 수행을 하게 된다면 총 시간복잡도는 O(nm)이 되는데 데이터가 10만개가 되면 시간초과 오류..

[백준] 17478 재귀함수가 뭔가요? (Python 파이썬)

https://www.acmicpc.net/problem/17478 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 문제 설명 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대학교가 자신과 맞는가에 대한 고민을 항상 해왔다. 중앙대학교와 자신의 길이 맞지 않다고 생각한 JH 교수님은 결국 중앙대학교를 떠나기로 결정하였다. 떠나기 전까지도 제자들을 생각하셨던 JH 교수님은 재귀함..

[Codility]GenomicRangeQuery (Python, Kotlin)

https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/start/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 문제 설명 A:1, C:2, G:3, T:4 이며 'A,C,G,T'로 이루어진 문자열 S를 P[i]부터 Q[i]까지 범위의 인덱스로 잘랐을 때 해당 문자열 내의 최솟값을 구하는 문제이다. 즉, 'CAGCCTA' 라는 문자열 S가 주어지고, P[0] = 2, Q[0] = 4 이면 자른 문자열은 GCC가 되고 여기서 최솟값은 C = 2가 된다. 풀이 과정 이 문제를 풀면서 굉장..

[백준] 20057 마법사 상어와 토네이도 (Python 파이썬)

https://www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 문제 설명 문제의 자세한 설명은 위 링크를 참조하시길 바랍니다. 이 문제는 구현 시뮬레이션 문제로, 문제에서 요구하는 사항이 꽤 많고 상세합니다. 빠짐없이 체크하여 어떻게 구현해야 할지 구상한 후에 구현해야 하는 문제입니다. 풀이 과정 from collections import deque n = int(input()) graph = [] graphIdx = dequ..

[백준] 20056 마법사 상어와 파이어볼 (Python 파이썬)

https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 문제 설명 문제의 자세한 설명은 위 링크를 참조하시길 바랍니다. 이 문제는 구현 시뮬레이션 문제로, 문제에서 요구하는 사항이 꽤 많고 상세합니다. 빠짐없이 체크하여 어떻게 구현해야 할지 구상한 후에 구현해야 하는 문제입니다. 풀이 과정 ① 먼저 초기의 파이어볼을 입력받은 후에 fireball라는 큐와 graph의 각 칸에 파이어볼을 삽입합니다. firebal..

[백준] 21609 상어 중학교 (Python 파이썬)

문제 설명 https://www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net 문제의 설명이 굉장히 긴 편이라 위 링크의 문제를 꼼꼼히 읽어보시고 풀이과정을 살펴보시길 추천드립니다. 일반적인 BFS/ DFS 문제보다 신경써서 구현해야 할 부분들이 훨씬 까다로운 문제이므로 과정을 하나하나 잘 살펴보면서 구현하시는 것을 추천드립니다. 풀이 과정 먼저 두 방법으로 풀면서 코드를 두 가지로 작성해보았습니다. 코드①은 구현해야 할 부분들을 그대로 나열식으로 작성한 코드..

Algorithm/DFS & BFS 2021.10.22

[백준] 21611 마법사 상어와 블리자드 (Python 파이썬)

https://www.acmicpc.net/problem/21611 21611번: 마법사 상어와 블리자드 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그, 비바라기 마법을 할 수 있다. 오늘 새로 배운 마법은 블리자드이고, 크기가 N×N인 격자에서 연습하려고 한다. N은 항상 홀수이고, ( www.acmicpc.net 문제 설명 문제의 설명이 굉장히 긴 편이라 위 링크의 문제를 꼼꼼히 읽어보시고 풀이과정을 살펴보시길 추천드립니다. 이 문제는, 특별한 알고리즘 없이 문제에서 주어진 사항을 구현하는 문제이지만 구현해야 하는 부분들이 굉장히 까다로운 문제였습니다 풀이 과정 풀이과정이 굉장히 길기 때문에, 잘 모르시는 부분을 중점으로 보시는 것을 추천드립니다. ① 먼저, 가운데 칸(n//2, n//2..

[백준] 21610 마법사 상어와 비바라기

문제 설명 https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 문제에서 주어진 조건사항들을 그대로 구현하는 문제이다. 큰 제약사항이나 알고리즘이 따로 사용되지는 않으므로 순서에 맞게 그대로 구현만 잘 해주면 된다. 풀이 과정 문제에서 특별히 신경써주어야 하는 부분은, 조건5 부분이다. 먼저, 구름이 di 방향으로 si칸 이동한 후에 비를 뿌리고 구름은 사라진다. 이 때, 구름이 사라진 칸은 물복사 버그 후에 구름이 생길 수 없기 때문에 1로..