본문 바로가기

Computer Science&Engineering/코딩테스트

(59)
[백준 7576] 토마토 # 문제 링크 www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 쉽게 생각했다가 엄청 고생한 문제다. 1로 표시된 익은 토마토부터 최단거리 구하는거니까 BFS 로 구하면 되겠네~ 했다. 그래서 배열을 입력 받은 후 for 문 돌려가며 1을 찾아서 DFS를 돌렸고, 가장 작은 수로 배열을 채웠다. 테스트 케이스를 돌렸을 때는 다 맞았는데, 제출을 하면 계속 틀렸다고 나왔다. 뭐가 틀린지도 모르고 계속 싸매다가 결국 구글링을 했다. 바로 속이 싸악..
[백준 15650] N과 M (2) #조합 # 문제 링크 www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이 문제는 1부터 N까지 자연수 중에서 중복없이 M개를 고른 수열을 출력하는 문제로, 조합 문제입니다. 이전 글인 순열 계산 문제에서 4개 중에 2개를 꼽으면 아래와 같습니다. (순열 계산 참고) 2021.03.13 - [Computer Science&Engineering/코딩테스트] - [백준 15649] N과 M (1)) 4 2 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4..
[백준 15649] N과 M (1) # 문제링크 www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이 문제 역시 순열을 출력하는 문제입니다. 이전에 풀었던 순열 문제를 아주 살짝! 수정해주면 풀이를 할 수 있습니다. 아래 "모든 순열" 글을 참고하세요. 2021.03.13 - [Computer Science&Engineering/코딩테스트] - [백준 10974] 모든 순열 # 제출 코드 // N과 M(1) # include using namespace std; int N, M; bool ch..
[백준 10974] 모든 순열 # 문제 링크 www.acmicpc.net/problem/10974 10974번: 모든 순열 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. www.acmicpc.net 처음에는 순열 출력 구현에 애를 먹었지만, 코드를 보고나서 충격을 받아 외워버렸습니다. 1부터 N까지 DFS를 호출하는데, 출력시에 숫자를 중복해서 넣지 않도록 check 배열을 만들어서 확인해줍니다. 이후 출력을 한 뒤에는 다시 해당 숫자를 쓸 수 있도록 check를 초기화해줍니다. # 제출 코드 # include using namespace std; int N; bool check[10]; int num[10]; void DFS(int node){ if (node >= N) { fo..
[백준 1260] DFS와 BFS # 문제 링크 www.acmicpc.net/problem/1260 # 제출 코드 #include #include #include #include #include using namespace std; vector a[1001]; bool check[1001]; void dfs(int node) { check[node] = true; cout start; for(int i =0; i> u >> v ; a[u].push_back(v); a[v].push_back(u); } for(int i = 1; i
[백준 9095] 1, 2, 3 더하기 반복문 풀이, 재귀적 풀이 # 문제 링크 www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net # 풀이방법 문제 예시로 나온 4를 보면, 4를 만들기 위해서는 3을 만든거에 1을 더하고, 2에다가 2를 더하고, 1에다가 3을 더하면 된다. 따라서 n 번째 숫자를 만드는 방법의 수는 n-1, n-2, n-3 를 만드는 법의 합이 된다. n 이 최대 11로 숫자가 크지 않기 때문에, 재귀로 풀어도 되고 - 반복문으로 풀어도 된다. # 반복문 풀이 방법 #include using namespace std; int d[15]; int main(){ int t; cin >> t; d[1] = 1;..
[백준 1406] 에디터 문제 링크 www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net ✅ 커서의 왼쪽에 들어가는 문자들과, 커서의 오른쪽에 들어가는 문자들을 따로 보관하였다. 커서가 움직일 때마다 왼쪽과 오른쪽 문자가 들어있는 배열에 push 하고 pop 하여 구현하였다. R의 최대는 600000 이고, L은 커서를 왼쪽으로 옮길 때 입력이 되기 때문에 (문자 입력+L 동작이 필요) 300000을 최대로 잡았다. C언어로 풀었는데, 아마 C++ 이나 파이썬에서는 stack 을 활용해서 ..
[백준 10799] 쇠막대기 문제 링크 www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net '(' 가 나오면 막대기 레이어가 추가되고, ')'가 나오면 레이어가 준다. '()' 가 나오면 레이어 수만큼 절단된 쇠막대기 개수가 증가한다. # 제출 코드 #include char A[100000+10]; int main(){ int i = 0, layer = 0, sum = 0; scanf("%s", A); for(i=0; A[i]; i++){ if(A[i] == '(' && A[i+1]== ')') { ..