본문 바로가기

전체 글

16426 '나교수' 교수님의 악필 이것도 문자열로 처리하면 쉽겠다고 생각했다. 그래서 문자열로 입력 받은 뒤 0이나 6을 만나면 9로 저장한 다음 마지막으로 숫자로 바꾼 후 계산했다. 평균을 구할 때 반올림을 해야 해서 실수로 계산 뒤 round를 사용했다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long int; using ii = pair; using ii.. 더보기
19698 헛간 청약 간단한 수학 문제였다. 조심해야 할 부분은 소의 마리 수 보다 면적이 더 넓은 경우에는 소의 개수만큼만 출력해야 한다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long int; using ii = pair; using iis = pair; using ii64 = pair; using iii = tuple; int main() .. 더보기
9436 Round Robin 처음에 erase 안 쓰고 true, false 값을 따로 둬서 구하려고 했었다. 그리고 나머지 연산 써서 인덱스로 계산하려고 했는데 너무너무 복잡했다. 그렇게 삽질 하다가 안 되겠다 싶어서 그냥 그대로 구현했다. 나머지 연산도 안 하고 그냥 1씩 계속 더했다.. 진작 이렇게 풀껄 T가 100이고 N이 100이어서 시간 내로 충분히 돌아간다. erase 쓰더라도 잘 돌아간다ㅋㅋ (참고 : erase()의 시간 복잡도는 N이다) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy sec.. 더보기
1697 숨바꼭질 이건 어떻게 풀어야 할지 몰라서 고민했다. 처음에 DP로 풀어보려다가 식이 안 나오고 어려워서 다른사람 풀이를 참고했다. 이야... 큐로 넣어서 bfs로 풀더라... 그래프 처럼 안 생겼는데 이걸 bfs로 생각해서 풀다니 신기하다. -1, +1, *2한 계산 결과를 큐에 넣고 큐에서 하나씩 빼가면서 동생의 위치랑 일치하는지 비교한다. 이 다음 궁금한게 이렇게 하면 최소 횟수가 되나? 싶었다. 그래프로 그려보면 높이가 움직인 횟수이고 bfs는 너비 우선 탐색이라 처음 일치한 게 최소라는 게 보장된다! #include #include #include #include #include #include #include #include #include #include #include #include #include.. 더보기
10451 순열 사이클 처음에는 이게 무슨 말이지?? 싶었는데 i와 v[i]를 이어가며 연결하는 거였다. dfs로 순회하면서 덩어리가 몇 개 나오면 되는지 세면 된다. 쉬웠음 ~.~ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long int; using ii = pair; using iis = pair; using ii64 = pair; using ii.. 더보기
6373 Round and Round We Go 풀어보려다가 문자열 곱셈 구해야 해서 패스,, ㅠㅠ #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long; using ii = pair; using ii64 = pair; bool solve(i64 n) { string s1 = to_string(n); for (int i = 1; i 더보기
17425 약수의 합 N보다 작은 약수들의 합 어떻게 구할지 그려보니 N이 10이라 한다면 1은 10번 2는 5번 ... 이런 규칙이 보였다. 그래서 1부터 10^6까지의 모든 수를 다 미리 구하고 그 수의 합을 구한 뒤 하나씩 출력했다. #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long; using ii = pair; using ii64 = pair; i64 calc[1000005]; i64 sum[100000.. 더보기
2981 검문 나머지가 같게 되는 M을 찾는 문제 느낌상 모두 M으로 나눠야 하니 M이 모든 수의 약수가 되어야 된다고 생각했는데 나머지가 있는 게 문제였다. 이전에 이런 숫자? 다루는 문제는 숫자끼리 빼야 한다는 걸 풀어봐서 뺐더니 나머지가 같다면 나머지가 없어진다는 것을 알 수 있었다. 그래서 숫자를 뺀 후 그 수들의 최대공약수를 구하고 최대공약수의 약수를 출력하게 해서 풀 수 있었다. 문제 풀면서 생각없이 인접한 수만 빼서 구했는데 사실 왜 전부를 빼서 구하지 않을까를 고민했어야 했다ㅋㅋ 예를 들어 x2 - x1이 a 이고 x3 - x2가 b라면 a도 m의 배수이고 b도 m의 배수가 된다. 그럼 x3 - x1 = a + b가 돼서 이것 또한 m의 배수이다. 그래서 m을 결정하는 최소 단위가 인전합 애들의 차라서 .. 더보기