티스토리 뷰
인덱스 회전
- 동, 서, 남, 북으로 순차적으로 회전하는 무언가가 있다고 가정할 때, 코드에서 이것을 표현하려면 아래와 같이 표현할 수 있다.
int direction = direction + 1;
if (direction == 4) {
direction = 0;
}
- 동서남북을 각각 0, 1, 2, 3이라고 하고 현재 방향에서 +1씩 더하면서 방향을 바꾸는 것이고 만약 북쪽에서 +1을 해서 direction = 4가 되면 동쪽인 0으로 강제로 바꾸어주는 것이다.
- 또 다른 방법으로는 나머지 연산을 이용하는 것이다.
- 작은 수를 큰 수로 나누게 되면 작은 수가 나머지가 되는 것을 이용하는 것이다.
int direction = (direction + 1) % 4;
- 동서남북의 범위에서는 direction + 1을 한 결과가 그대로 나오게 되고 direction이 동서남북 범위를 넘어가면 나머지가 0~3 범위에서 계산되어 나온다. 따라서 조건문을 따로 만들어서 강제로 바꾸어줄 필요가 없다!
- 1 % 4 = 1
- 2 % 4 = 2
- 3 % 4 = 3
- 4 % 4 = 0 (0번 인덱스로 회전)
- 5 % 4 = 1
- 6 % 4 = 2
- 7 % 4 = 3
- 8 % 4 = 0
- 만약 역방향 회전까지 고려를 해야 한다면,
if (정방향 회전일 경우) {
direction = direction + 1;
if (direction == 4) {
direction = 0;
}
} else {
direction = direction - 1;
if (direction == -1) {
direciton = 4;
}
}
- 나머지 연산을 사용하지 않는다면 이처럼 코드가 길어지지만
if (정방향 회전) {
direction = (direction + 1) % 4;
} else
direction = (4 + (direction - 1)) % 4;
- 나머지 연산을 사용하면 보다 깔끔하게 적을 수 있다.
- 이 원리는 아스키 코드를 이용한 알고리즘 풀이에서도 사용이 된다.
- 예를 들어 abc 를 각각 3칸씩 밀어야 하는 경우가 있다면 각각의 아스키 코드 + 3을 해서 def 를 구할 수 있겠지만 xyz 를 3칸씩 밀어야 한다면 원하는 abc 라는 답을 얻을 수 없다.
- 물론 이 경우에도 조건문을 이용해 해결할 수 있지만 나머지 연산을 사용하고자 한다면 아래와 같이 할 수 있다!
- ch = 현재 알파벳, n = 이동 거리 라고 가정하고
(char) ('a' + (ch + n - 'a') % 26);
- 나머지 연산은 요소의 개수로 하면 된다. 동서남북일 때는 4이고 알파벳 같은 경우는 총 26개이므로 26으로 하는 것이다.
- 이것 또한 역방향 회전은 아래와 같이 표현할 수 있다!
(char) ('z' + (ch - n - 'z') % 26);
참고용 자바스크립트 코드
String.fromCharCode(122 + (ch - n - 122) % 26);
GitHub - g4dalcom/dev_vault: What I learned / 공부한 것들을 기록합니다!
What I learned / 공부한 것들을 기록합니다! Contribute to g4dalcom/dev_vault development by creating an account on GitHub.
github.com
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 기타 레슨(백준2343번)_실버1_이분탐색(binary search) (0) | 2023.04.12 |
---|---|
[알고리즘] 달리기 경주(프로그래머스 레벨1_해시맵(HashMap) (0) | 2023.04.10 |
[알고리즘] 공원 산책(프로그래머스 레벨1_시뮬레이션, 큐(Queue) (0) | 2023.03.30 |
[알고리즘] 광물 캐기(프로그래머스 레벨2)_그래프 탐색, dfs, 백트래킹(backtracking) (0) | 2023.03.29 |
[알고리즘] CCW(백준11758번)_골드5_기하학, 기하, 벡터, 외적, 신발끈 (0) | 2023.03.23 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- java
- 자바dp
- 형변환
- CS
- BFS
- dfs
- JPA
- SQLD
- Comparator
- Spring
- 자바
- 스프링
- Nest
- 스프링부트
- 타입스크립트
- 자바bfs
- 백준
- Algorithm
- Queue
- 정렬
- JavaScript
- DP
- 자바트리
- 해시맵
- 리액트
- SQL
- 이분탐색
- 자바스크립트
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함