목록Baekjoon/Gold (80)
GitHubSeob

문제 https://www.acmicpc.net/problem/22942 22942번: 데이터 체커 데이터가 조건에 맞는다면 YES, 조건에 만족하지 않는다면 NO를 출력한다. www.acmicpc.net 문제풀이 원이 모두 x축 위에 있으므로 모두 y=0이다. vector 를 이용하여 x좌표와 반지름을 입력받을 때 first에는 x-r, second에는 x+r값을 저장한다. (first = 원이 x축에 닿는 점 중 왼쪽 점, second 오른쪽 점) 먼저 왼쪽 점 좌표를 기준으로 오름차순으로 정렬한다. 이중 for문을 이용해 경우의 수를 따진다. - 첫 번째 if문 첫 번째 원의 first값 == 두 번째 원의 first값일 때 두 원이 겹치면 continue 그렇지 않으면 if문 조건에 걸려 NO출력..

문제 https://www.acmicpc.net/problem/1039 1039번: 교환 첫째 줄에 정수 N과 K가 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, K는 10보다 작거나 같은 자연수이다. www.acmicpc.net 문제풀이 숫자를 string형으로 받고 BFS로 풀었다. 모든 경우를 탐색하면서 가장 큰 수를 갱신했다. 그러나 같은 숫자를 또 판별하게 되면 메모리 초과가 발생한다. 방문은 set을 이용하여 방문 처리를 하였다. 숫자를 바꿨을 때 맨 앞자리가 0이 아니고, 처음 본 숫자일 때만 큐에 넣도록 했다. cnt +1 == K (숫자를 한번 바꿨을 때), K - (cnt +1) % 2 == 0 일 때 (숫자를 한번 바꾼 후, 숫자를 두 번 바꾸면 같은 숫자가 되므로),..

문제 https://www.acmicpc.net/problem/16397 16397번: 탈출 첫 번째 줄에 N (0 ≤ N ≤ 99,999), T (1 ≤ T ≤ 99,999), G (0 ≤ G ≤ 99,999)가 공백 하나를 사이에 두고 주어진다. 각각 N은 LED로 표현된 수, T는 버튼을 누를 수 있는 최대 횟수, G는 탈출을 위해 똑같이 www.acmicpc.net 문제풀이 크게 어렵지는 않은 문제이다. while(!q.empty())문에서 T 횟수를 넘기면 break를 해서 "ANG"을 출력하려고 했는데 45%쯤에서 실패가 떠서 반례가 있나 찾으러 다녔는데 반례는 없었고 break문을 거는 조건에서 실수를 해서 헤맸다. 같은 숫자는 확인 안 하도록 visit벡터를 이용한다. 숫자를 입력받고 숫자..

문제 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 문제풀이 5427번 불과 유사한 문제이다. 물이 먼저 차오른 뒤 고슴도치가 움직인다. 고슴도치의 위치를 나타내는 loc큐, 물의 위치를 나타내는 water큐를 선언한다. 각 큐는 벡터로 구성되고 y좌표, x좌표, 몇 분이 지났는지를 나타낸다. pre와 cnt, w_pre, w_cnt는 1분이 지났을 때 더 이상 while문이 돌지 않도록 하기 위해 분을 나타내는 변수이다. while(1) 문을 실행하고 ..

문제 https://www.acmicpc.net/problem/5427 5427번: 불 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에 www.acmicpc.net 문제풀이 불이 먼저 번지고 상근이가 움직이는 문제이다. 테스트 케이스가 있기 때문에 테스트 케이스를 돌리기 전에 초기화하는 함수를 따로 만든다. 불이 번지는 함수와 상근이가 움직이는 함수도 따로 만든다. BFS로 문제를 풀었고 입력을 받을 때 시작 위치는 loc큐에, 불의 위치는 fire큐에 y, x좌표값을 입력한다. void Init(int w, int h) 건물의 상태를 map이라는 2차원 벡터, l..

문제 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/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/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..