Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 리버싱
- 1557
- E - Hanging Hearts
- list_display
- Div. 2
- shake!
- 넥토리얼
- Hello 2023
- 레지스터
- 밑바닥부터 시작하는 딥러닝 1
- 카카오 로그인
- 인하대 프로그래밍 경진대회
- 기본키 변경
- iupc
- Round 866
- Good Bye 2022: 2023 is NEAR
- vue3
- idpiframe_initialization_failed
- Flutter
- 앳코더
- 2022
- Graph Cost
- expand item
- 카카오 API
- Codeforces Round 831 (Div. 1 + Div. 2)
- 코드포스
- vue-google-login
- 알고리즘 대회
- dart
- django
Archives
- Today
- Total
pseong
Codeforces Round #789 (Div. 2) D. Tokitsukaze and Meeting 본문
Problem - D - Codeforces
codeforces.com
그냥 구현 문젠데 어려워서 정리
잘 관찰만 하면 되는데 그게 어려운 문제
행과 열을 각 각 따로 계산해서 더해줘야 한다.
행에서는 m개의 요소가 계속 돌면서 채워주기 때문에
행 카운트는 항상 단조 증가한다.
m개의 요소가 계속 돌기 때문에 만약 안 채워져 있으면 카운트를 1 증가시켜주고 채워주면 된다.
열에서의 관찰이 조금 어려웠는데
일일이 1이 들어오는 경우의 수를 따지다 보니까 굉장히 문제가 어려워졌다.
사실 열에서도 m개의 요소가 사이클을 도는 건 맞지만 한 번 돌 때마다 새로운 m개의 요소가 앞에 추가가 된다.
m개의 요소가 사이클을 도니까 m번마다 열 카운트가 반복될 것이다.
반복될 때마다 새로운 요소 한 줄이 맨 앞에 붙으니까 맨 앞줄에 1이 있다면 1을 증가시켜주면 된다.
다시 말해서 m번마다 열 카운트가 반복되니까 배열 int arr[m] 이 필요할 것이다.
i%m 마다 맨 앞줄에 1 이 있는지 확인하고 있으면 arr[i%m]을 1 증가시켜 주면 된다.
맨 앞줄에 1이 있는지 확인하는 방법은 마지막 1이 들어왔을 때의 인덱스를 last로 저장해준다.
만약 현재 확인하려는 i번째 인덱스가 last와의 차이가 m보다 작다면 맨 앞줄에 1이 존재하는 것이다.
일일이 경우의 수를 따져보는 것도 좋지만 먼저 m개마다 반복된다는 그 사실에 집중하고 반복이 되니까 따로따로 저장을 해야 한다는 것까지가 핵심 생각인 것 같다.
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
Codeforces Round #792 (Div. 1 + Div. 2) E. MEX vs DIFF (0) | 2022.05.25 |
---|---|
Codeforces Round #792 (Div. 1 + Div. 2) C. Column Swapping (0) | 2022.05.25 |
AtCoder Beginner Contest 249 F - Ignore Operations (0) | 2022.05.12 |
AtCoder Beginner Contest 250 F - One Fourth (0) | 2022.05.10 |
코드포스 Codeforces Round #751 (Div. 2) 풀이 (0) | 2021.10.30 |
Comments