목록Baekjoon/Silver (86)
GitHubSeob

문제 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/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 문제풀이 메모이제이션을 이용했다. idx는 0부터 N-1까지, idx2는 idx부터 N-1까지로 둔다. idx는 더하려는 첫 번째 원소, idx2는 더하려는 마지막 원소이다. 따라서 idx부터 idx2까지 더한 값을 구하고, M인지 판별을 한다. 각각의 값은 자연수이므로 sum이 M을 넘어가면 더할 때마다 무조건 커지므로 효율성을 위해 break를 한..

문제 https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 문제풀이 다음칸을 선택, 선택하지 않는 경우인 두 경우를 나누어 DFS함수를 실행시킨다. 선택한다면 visit함수에 push_back으로 해당 idx번째 값을 넣어준다. idx가 N-1이 되었다면 visit벡터의 값들의 합을 구해 S와 같은지를 비교한다. 모두 선택하지 않는 경우는 개수에 포함이 안되므로 visit의 size가 0이 아닐 때라는 조건을 걸어..

문제 https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 문제풀이 다음칸을 선택, 선택하지 않는 경우인 두 경우를 나누어 DFS함수를 실행시킨다. DFS함수의 인자는 현재 위치가 로또의 몇 번째 숫자인지를 idx, 몇 개를 선택했는지가 cnt이다. 6개만 고르면 되므로 cnt가 6일 때 answer에 담은 숫자들을 출력한다. idx+1이 num보다 작을 때만 DFS함수를 실행하도록 하면 된다. 코드 #include #include usi..

문제 https://www.acmicpc.net/problem/3184 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net 문제풀이 DFS로 풀었다. visit함수를 따로 만들지 않고 방문을 했으면 #표시를 했다. 울타리 안에서 상하좌우 어디로든 갈 수 있다. 전역 변수로 양 o, 늑대 v를 만들어서 메인 문에서 o과 v를 초기화하고 DFS함수를 실행한다. 메인 문에서 DFS는 #를 제외한., v, o일 때만 실행한다. 근처에 가지 않은 곳은 울타리밖에 없어 더 이상 갈 수 없을 때 메인 문으로 돌아..

문제 https://www.acmicpc.net/problem/2251 2251번: 물통 각각 부피가 A, B, C(1≤A, B, C≤200) 리터인 세 개의 물통이 있다. 처음에는 앞의 두 물통은 비어 있고, 세 번째 물통은 가득(C 리터) 차 있다. 이제 어떤 물통에 들어있는 물을 다른 물통으로 쏟아 부 www.acmicpc.net 문제풀이 물을 옮기는 경우는 A->B, A->C B->A, B->C C->A, C->B 총 6가지가 있다. n번 물통에서 m번 물통으로 물을 옮긴다 가정하자. n번 물통이 빌 때까지 m번 물통으로 옮기는 경우와, m번 물통이 꽉 차 n번에서 더 이상 옮길 수 없는 경우가 있다. 이걸 식으로 나타내면 물통 M은 min(max_M, N+M), 물통 N은 N+M - min(ma..

문제 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제풀이 BFS를 이용해 풀었다. 방문 함수를 만들어 같은 곳을 재방문하지 않도록 했다. 2열짜리 큐를 만들어 현재 위치, 몇번 이동했는지를 나타낸다. 점은 100,000까지 있으므로 더 넘지 못하고, 각각 제한을 걸어 효율적으로 이동할 수 있게 한다. 코드 #include #include #include using namespace std; vectorvisit(..

문제 https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 문제풀이 DFS로 풀었고, 1차원 방문 벡터를 이용한다. 처음에 출발하는 도시, 현재 위치한 도시, 비용, 방문 배열을 인자로 받는 함수 Move를 만든다. Move는 매번 방문 벡터를 돌면서 가지 않은 도시가 있는지 체크를 한다. 모든 도시를 돌았고, 현재 있는 도시가 처음에 출발한 도시였고, answer값 보다 작으면 answer값을 경신한다...

문제 https://www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 문제풀이 두 가지방법으로 문제를 풀었다. 첫번째는 에 있는 모든 순열의 경우의 수를 알려주는 next_permutation 함수를 이용했다. 두번째는 오름차순으로 정렬해서 벡터를 반으로 나누고 계산하고, 내림차순으로 정렬해서 벡터를 반으로 나누고 계산을 해서 큰 값을 출력했다. 코드 1) #include #include #include #include using namespace std; int main(..