백준 1629 (재귀함수)
하고싶은거/알고리즘 문제풀이2024. 4. 7. 18:48백준 1629 (재귀함수)

1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 과정 일단.. 문제가 너---무 단순해서 뭘 원하는지 파악하기에 당황했다. 단순히 A를 B만큼 곱하고, C로 나눈 후 나머지를 구하는건데, A를 B만큼 곱하는 과정에서 뻔하게 A를 B만큼 for문으로 곱하면 100000% 시간초과에 걸릴 것 같고.. C로 나누는 거에 뭐가 있나? 싶기도 하고.. 일단, 시간 초과 관련해서는 아래와 같은 코드를 작성해줌으로서 조금 완화된다는 것을 알고 있다. ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 거듭제곱에 대한 또다..

하고싶은거/알고리즘 문제풀이2024. 4. 5. 20:56백준 1149 (DP)

1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 과정 음.. 그니까 내집 기준 앞번호, 뒷번호랑 집의 색까리 같으면 안된다. 그리고 색칠하는 비용이 모두 다르고, 최소값을 구하라고 하니까, DP와 min을 사용해서 코드를 짜볼것이다. 고민을 가장 많이 한 부분은 단순 최소값만 생각할게 아니라, 색의 종류도 함께 고민을 해야한다는 점이었다. key:value로 넣을 것인지, 아니면 그냥 RGB순서로 인덱스로 구분할 것인지 고민했다. : 이 부분은 코드를 짜다보니, 어차피 DP라는 특성상 현..

백준 1107 ( 브루트 포스 방법)
하고싶은거/알고리즘 문제풀이2024. 3. 31. 23:47백준 1107 ( 브루트 포스 방법)

1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 www.acmicpc.net 과정 원하는 채널에 가장 가까운 번호(W) 찾기 → 100에서 W 까지 버튼 수 체크 → (W - 원하는 채널) 해서 +,-수 체크 이런식으로 계획했다. 원하는 채널에 가장 가까운 번호를 어떻게 찾는지가 가장 처음으로 고민한 주제이다. 원래는 원하는 채널 번호 기준 가장 가까운 채널번호를 구해서 +, -수만 더 추가하려고 했는데, 생각해보니 100부터 시작이니까 가장 가까운 채널번호가 가장 적게 버튼을 누른다는 보장도 없고, 버튼이 죄다 고장났..

백준 11724 (DFS)
하고싶은거/알고리즘 문제풀이2024. 3. 30. 21:08백준 11724 (DFS)

11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어 www.acmicpc.net 과정 이미 문제에서 그래프라고 보여주기 때문에 DFS냐 BFS냐 만 고르면 되는데 이건 DFS가 맞다 싶어서 바로 DFS로 접근했다. 2606문제와 살짝 다른점은, 간선으로 연결된 정점 뭉치들의 개수를 알고 싶기 때문에, 연결될 때마다 answer을 추가하는게 아닌, DFS를 입력할 때 접근하지 않은 정점일 때! 이때 answer을 추가했다. 코드 #include #include using names..

백준 7569 (BFS)
하고싶은거/알고리즘 문제풀이2024. 3. 30. 00:01백준 7569 (BFS)

7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 과정 문제를 보자마자 배추벌레나 컴퓨터 바이러스처럼 DFS가 생각났다. 다만, 이전 문제들과 다르게 3차원벡터가 필요할 것 같았고, 이 부분에서 생각이 오래 걸렸다. 토마토가 익는데는 하루가 필요하고, 분명 중복되게 인접하는 토마토가 있을텐데 이것과 관련하여 최소 일자를 그냥 DFS를 사용해서 구해버리면 되는건가 했다. → 여기서부터 실수였다. 몇일 동안 문제를 풀면서 DFS만 사용했더니 BFS를 잊고 있었다. 이 문제는 한개의 정점으로부..

백준 5430
하고싶은거/알고리즘 문제풀이2024. 3. 28. 12:12백준 5430

5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 과정 지금껏 풀었던 문제와 다르게 문자열형식으로 받아서 그 중 정수만을 빼내야할 것 같았다. 여기서부터 해결하기로 했다. R과 D의 함수자체는 어렵지 않은데, 테스트케이스와 배열의 크기가 커서 타임오버가 걸리지 않을까 걱정했다. 처음 시도는 리스트로 테스트케이스를 굴렸다. 왜냐하면, 1. 함수 R을 할 때 노드 화살표만 바꿔주면 될거 같아서 2. 함수 D를 할 때 벡터로하면 인덱스 정렬을 다시 해줘야할거 같아서 근데 의문이 들었다. 일단 저 코드처럼 R이 나올 때 마다 꼭 뒤집어져야하는가? 그냥 뒤집었는지 아닌지만 알..

백준 2606 (DFS)
하고싶은거/알고리즘 문제풀이2024. 3. 26. 13:57백준 2606 (DFS)

2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net 과정 한 컴퓨터 기준 연결되어있는 모든 컴퓨터를 조사하는 느낌으로 저번에 풀었던 배추벌레? 문제랑 비슷한 것을 느꼈다. 그래서 DFS로 계획을 세웠다. 코드 처음에는 이렇게 작성했는데, 터미널을 보면, 2번 컴퓨터와 연결된 컴퓨터 개수가 1개라고 찍힌다. 그 이유는 main에서 시작 컴퓨터 벡터에만 연결상태를 입력했기 때문이다. #include #include using namespace std; int node = 0; // 컴퓨터 수 int edge = 0; //..

백준 2579 (DP)
하고싶은거/알고리즘 문제풀이2024. 3. 24. 22:18백준 2579 (DP)

2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 과정 처음에는 그래프인가 했다가 이것도 계단 오르는 규칙이 있는 문제이므로 DP를 이용해서 풀어보려고 했다. 계단을 오르는데는 2가지 규칙이 있다. 1. 연속된 2개 계단 오르기 2. 한 칸만 건너뛰기 즉, 현재 내가 서있는 칸(N)을 연속된 2번째 계단으로 만들건지,(N-1을 밟은 상태) 한칸 건너뛴 계단으로 만들건지(N-1을 안밟은 상태) 결정해야 한다. 따라서, DP[N] = max(DP[N-3] + Arr[N-1] + Arr[N], DP[N-2] + Arr[N]) 또..

백준 1463 (점화식)
하고싶은거/알고리즘 문제풀이2024. 3. 23. 20:04백준 1463 (점화식)

1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 과정 백준 2839처럼 한 숫자에 대해 지지고 볶아서 최소한으로 원하는 결과를 만드는 유형으로 파악했다. 즉, 마지막 수는 2를 만들어서 1로 빼주는 과정으로 진행되어야 한다. #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int N = 0; // 정수 N int count = 0; // 최종적으로 N을 1로 만드는데 연산한 횟수 cin >> N; while (N != 1) // 최종적으로 2를 만들어야하기때문 { // N이 3으로 나누어 떨어지는 경우 if (N % 3 =..

백준 1012 (DFS)
하고싶은거/알고리즘 문제풀이2024. 3. 23. 01:00백준 1012 (DFS)

1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 과정 가로 세로로 지렁이가 움직일 수 있는 영역을 묶음으로 처리해야겠다고 생각했다. 처음에는 벡터에 배추가 심어진 좌표값을 하나씩 받고, 그것들의 평균치를 구해서 평균값에 들어오면 같은 묶음, 아니면 다른 묶음으로 처리하려고 했다. 하지만, 2*3마냥 진짜 무더기로 있는 경우 평균값을 어떻게 구해야할 지 몰랐고, 추가적으로 문제를 잘못이해한 내용이 있다. 무조건 동서남북으로 5개까지만 이동 가능한 줄 알았는데, 계속 쭉 이동할 수 있었다. 결국 답을 찾아본 결과 DFS와 B..

image