본문 바로가기

백준7

[프로그래머스] 개인정보 수집 유효기간 C++ 날짜를 비교해서 유효기간이 지난 것들을 추려내는 문제다. 만약 '월'이 13, 14.. 같은 수가 나왔다면 12로 나눈 몫을 '년'에 더해주고 나머지를 '월'로 초기화해주면 된다. 그런데 12, 24 같은 12의 배수가 나오면 얘기가 다르다. 이 경우에는 (12로 나눈 몫 - 1) 만큼 '년'에 더해주고, 나머지가 0인 경우엔 12로 다시 바꿔줘야 한다. 아니면 '월'을 1 ~ 12로 보는게 아니라 0 ~ 11로 보고 계산을 해도 된다. 그럼 12의 배수인지 염병인지 따질 필요 없이 그냥 계산 다 해주고 마지막에 +1만 더해주면 된다. 실수하기 아주 쉬운 부분이다. 2024. 3. 28.
[C++] 백준 1107 (리모컨) 오답을 유발하는 가장 큰 원인은 바로 '첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.' 라는 문구 때문이 아닐까 싶다. 저 문장을 보고 티비채널은 0 ~ 500,000 까지 있구나 라고 생각할 수 있지만 문제에도 나와있듯 채널번호는 무한대이다. 즉 500,000 보다 더 큰 번호의 채널로 간 뒤에 채널을 아래로 내려서 원하는 채널을 맞출수도 있다는 것. 따라서 채널이 1,000,000 번 까지 있다고 생각하고 풀어야 된다. (정확히는 999,900) 0 ~ 1,000,000 채널 중에 고장난 숫자를 포함한 채널은 0을 반환해서 버리고, 작동하는 숫자버튼을 이용해서 갈 수 있는 채널에서 TargetChannel (수빈이가 이동하려고 하는 채널) 을 빼서 리모컨의 .. 2023. 8. 8.
[C++] 1012번 (유기농 배추) 아마도 가장 전형적인 DFS 문제가 아닐까 싶다. 한 지점에 지렁이가 있으면 그와 이웃한 곳에는 지렁이가 없어도 된다 (대각선 제외) . 모든 땅을 전부 돌면서 배추가 없는 곳과 방문을 했던 곳은 볼 필요 없고 배추가 있으면서 동시에 방문 하지 않았던 곳에서 출력값을 ++ 해준다. 그리고 DFS 함수를 이용해 그와 이웃한 곳에 있는 땅을 전부 방문해서 그곳에 배추가 있으면 방문기록을 해준다. #include using namespace std; int farm[50][50]; int visited[50][50]; int m, n, k; void DFS(int a, int b) { if (farm[a + 1][b] && a + 1 < m && !visited[a + 1][b]) { visited[a + 1.. 2023. 7. 8.
[C++] 1331번 (나이트 투어) 체스판에서 말이 모든 지점을 한 번씩 경유한 다음 마지막으로 도착한 지점에서 시작지점으로 다시 돌아갈 수 있는 경우, 이 경로를 '나이트 투어'라고 부른다고 한다. 말이 어떤 좌표로 이동하는지(경로)를 입력으로 받고 그 경로가 나이트 투어라면 Valid, 아니라면 Invalid를 출력하는 문제다. 말은 앞뒤좌우 중 한 방향으로 1칸 그리고 대각선으로 1칸 움직이는 기물이다. 따라서, Invalid를 출력해야 하는 경우는 다음과 같다. 1. 말이 갈 수 없는 경로로 움직인 경우. (1칸 + 대각선 1칸으로 갈 수 없는 곳을 간 경우) 2. 한 번 갔던 곳을 또 가는 경우. 3. 마지막 도착지점에서 시작지점으로 돌아갈 수 없는 경우. 따라서, 다음과 같이 코드를 작성할 수 있다. #include #inclu.. 2023. 5. 7.