본문 바로가기

C/Algorithm with 백준

(6)
2606번 바이러스 March 26, 2022 내가 여러 알고리즘을 배우며, 이 코드 또한 쓰는 시간이 길어지겠구나 생각했지만 아니었다. 엄청나게 빠르게 코드가 써졌다. 게다가 이 문제는 DFS나 BFS 둘 중 하나를 골라서 써도 되었다. 나는 일반적인 그래프 탐색 기법을 활용하여 코드를 써보았는데 정답이 나와서 너무 행복했다. 그리고 출력할 때 1을 빼주는데 시작 노드를 제외 시키기 위함이다. 왜냐하면 시작 컴퓨터로부터 감염된 컴퓨터의 개수를 구하는 것이기 때문이다. 아래에 내가 코드를 작성해두었고 문제 링크도 임베드해두었다. https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 ..
피보나치수열 DP 아래의 코드는 디피와 제귀함수를 활용하여 작성하였다 내가 디피를 쓴 이유는 디피를 쓰지 않으면 또 반복했던 제귀과정을 거쳐야 하기 때문이다. 그렇게 되면 필요 없는 시간이 낭비가 된다. #include int dp[1000]; int fibo(int n) { if(n==0) return 0; if(n==1) return 1; if(dp[n] != 0) return dp[n]; return dp[n] = fibo(n-1) + fibo(n-2); } int main() { int p; scanf("%d", &p); printf("%d", fibo(p)); return 0; }
1094번 막대기 너무 간단하다 코드가..ㅎㅎ 내가 쓴 코드이다. 당연히 더 간단하게 쓸 수 있겠지만ㅎㅎ #include #define value 64 int main() { int cmpr = 0; scanf("%d", &cmpr); int temp = 0; int cnt =0; for(int i=value; i>=1; i/=2) { while(true) { if(temp+i
1012번 유기농 배추 탐색 진짜 오랫동안 풀었습니다.. 처음에는 BFS를 활용하여 풀어야 한다 생각하고, 그렇게 계속 풀다가 잘못생각했다는것을 알아었다. 왜냐하면 문제를 푸는 도중.. 모두 탐색하고 방문했던 인덱스를 무시하는 방법만이 붙어있는 배추를 지렁이를 둘 하나의 공간으로 세는 것이 가능한 방법이었다는 사실을 알아냈기 때문이다. 그래서 DFS를 활용하여 풀어보았다.. 이 문제 꼭 풀어보고 싶었는데.. 여기까지 온 것이 행복하고 신기하다.. 이건 내 친구 동훈이 덕분에 잘 풀어내었다. 백준 링크는 아래와 같다 이 알고리즘을 풀어내었다!!!! 기분은 좋다. https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰..
2178번 미로탐색 최단거리 탐색이 가능한 BFS를 활용하여 코드를 작성함. March 25, 2022 이 미로 탐색의 특징은 모든 것을 다 탐색하지 않고 1로 되어있는 부분만 모두 탐색한다는 것이다. 이 코드를 작성해보니 BFS가 queue를 활용하여 가능한 부분만 수집하고 그 수집 된 부분만 탐색 된다는 사실을 더욱 자세히 알게 되었고, 재미를 느낄 수 있어서 좋았다. 백준 링크는 아래와 같다. https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net #include #include int M, N;..
9012번 괄호 (스택활용) 이 문제는 스택을 활용하여 풀어보았다. 스택을 활용하니 너무 쉬웠고, 고민하는 시간이 많기는 했다. 앞으로는 이러한 알고리즘 기법들을 생각해보고 풀어야겠다고 생각했다 겨우 규칙을 찾아내고 스택을 사용하니 성공했다. 백준 링크는 아래와 같다. https://www.acmicpc.net/problem/9012 아래는 내가 간단하게 써본 코드이다. #include int t; char arr[100]; int check[100]; int size; int main() { int i; scanf("%d", &t); while(t--) { scanf("%s", arr); for(i=0; arr[i] != NULL; i++) { check[size++] = arr[i]; if(size > 1 && check[siz..