목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 문제풀이 간단한 3차원 BFS문제. 값을 입력받을 때 시작 지점의 좌표를 queue에 push 한다. push를 한 좌표부터 시작을 하고, 큐가 빌 때까지 while문을 돌리거나, E라는 탈출구를 찾으면 된다. 큐는 z좌표, y좌표, x좌표, 이동 횟수로 구성한 벡터를 입력받는다. 다음칸이 .이면 이동하고, #칸이면 이동하지 않는다. 다음칸이 E라면 cnt+1의 값을 이용해 Escaped in x..

문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제풀이 단순하게 풀면 메모리랑 시간 초과가 날까 봐 좋은 방법이 있나 생각했는데 떠오르는 게 없어 모든 경우를 탐색하게 했다. N, M을 입력받고 0, 1, 2 값을 입력받으면서 1이면 벡터 home개수를 늘리고 y, x좌표를 넣어준다. 2이면 벡터 chicken개수를 늘리고 y, x좌표를 넣어준다. 모든 입력이 끝났으면 각 치킨집에서 모든 집에 대해 거리가 얼마인지 ..

문제 https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 문제풀이 값을 string으로 바꾸어 맨앞부터 시작하여 6이 연속으로 3번 있는지 확인을 한다. 있다면 cnt+=1을 하여 개수를 더한다. 없다면 string형인 값을 int형으로 바꾸고 +1을 한 뒤 다시 string형으로 변환한다. 개수가 N이 되었다면 값을 출력한다. 코드 #include #include using namespace std; int main() { ios::sync_w..

문제 https://www.acmicpc.net/problem/5582 5582번: 공통 부분 문자열 두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들 www.acmicpc.net 문제풀이 두 포인터 알고리즘을 이용하였다. 변수로 시작 지점(s)과 끝 지점(e)을 두고, 첫 번째 문자열에 대해 s인덱스부터 e인덱스까지 문자를 더해 새로운 문자열을 만든다. 그다음 해당 문자열이 두 번째 문자열에 있는지 find함수를 이용하여 구한다. 있다면 e를 +1 하고, 문자열에 e인덱스를 더해 새로운 문자열을 만든다. 없다면 s를 +1 하고, 문자열에 맨 앞을 erase..

문제 https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제풀이 큐 두 개를 선언한다. 하나는 요세푸스 큐, 다른 하나는 답을 내는 용인 answer 큐를 만든다. 먼저 큐에 모든 사람을 집어넣는다. while문을 이용해서 answer에 모든 사람을 집어넣을 때까지 반복을 한다. 현재 사람이 몇 번째인지 세기 위한 count변수를 하나 선언하고, 1부터 시작하여 K가 될 때까지 증가시킨다. 증가시키면서 요세푸스 큐의 첫 번째 값을 다시 요세푸스 큐에 push 하고 pop을 한다. 그렇게 되면 첫 번째 값을 꺼내 다시 큐 끝에 붙여 넣는 ..

문제 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문제풀이 처음에 string insert, erase를 써서 풀었는데 시간 초과가 나서 질문글을 보다가 stack으로 푼 사람이 있어서 stack으로 풀었다. stack을 두 개를 선언하여 앞, 뒤 스택을 만들었다. 명령어는 L, D, B, P로 총 네 가지가 있다. L일 때는 왼쪽으로 한 칸 이동이므로 앞 스택의 top값을 뒷 스택에 push 하고 앞 스택을 pop 한다. 그러면 앞 스택의 ..

문제 https://www.acmicpc.net/problem/7453 7453번: 합이 0인 네 정수 첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다. www.acmicpc.net 문제풀이 A에서 하나, B에서 하나, C에서 하나, D에서 하나를 무조건 골라 합이 0인 개수를 구하는 문제이다. 이중 for문으로 A와 B를 하나씩 고른 값을 sumAB에 저장, C와 D를 하나씩 고른 값을 sumCD에 저장한다. upper, lower bound를 이용하기 위해 각 벡터를 오름차순으로 정렬한다. for문으로 sumAB를 탐색하면서 sumCD에서 -sumA..

문제 https://www.acmicpc.net/problem/2143 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 문제풀이 부분 집합 중 연속된 부분으로 조합을 짜야한다. 먼저 A집합에 대해 이중 for문으로 메모이제이션을 이용해 연속된 부분의 합들을 구하고 sumA[합]의 개수를 늘려준다. 그 다음 B집합에 대해 똑같이 구한다. 대신에 sum을 구하면 sumA[T-sum]의 값을 answer에 더해준다. 코드 #includ..

문제 https://www.acmicpc.net/problem/2632 2632번: 피자판매 첫 번째 줄에는 손님이 구매하고자 하는 피자크기를 나타내는 2,000,000 이하의 자연수가 주어진다. 두 번째 줄에는 A, B 피자의 피자조각의 개수를 나타내 는 정수 m, n 이 차례로 주어진다 (3 ≤ m, n www.acmicpc.net 문제풀이 아래로 내리면 다시 푼 문제풀이가 있습니다. A 피자의 연속된 부분집합의 합을 구하고 unordered_map에 저장한다. 연속된 부분집합은 메모이제이션을 이용해서 이중 반복문으로 구한다. 피자는 원형이기 때문에 경우의 수를 아래와 같은 방법으로 구했다. idx1은 0부터 n-1까지, idx2는 합이 구하려는 조각보다 작다면 idx1의 바로 전 조각까지 구하도록 ..