지나가다가 우연히 봤던 문제를 풀어보았다. 오랜만에 풀어보는 ASCII 테이블 관련 문제였고 헷갈리는 부분이 몇가지 있었지만 그래도 끝내 잘 풀었다.
s 라는 문자열이 주어지고 shifts 라는 벡터가 있을때 0 인덱스부터 시작하는 shift의 숫자만큼 앞에 문자를 계속 올려주면 되는 문제이다.
꽤 흔한 문자열 타입의 문제고 ASCII 테이블의 이해도만 좀 있다면 풀 수 있는 문제였다.
처음에는 for 룹을 두번 사용해서 풀려고 했으나 역시 시간초과가 나왔고 전체를 더한 수에서 하나씩 빼주면서 앞으로 나갔어야지 문제없이 통과 가능하다.
문자열 사용이 오랜만이라 그런지 조금 해맨느낌이 있다. 전체 shifts의 수에 26을 % 준다음에 int 로 변환한 문자 값이 'z' 이상일 경우에는 'z' 값을 뺴주고 'a'의 더해주는 정말 나만 알아볼 수 있는 어지러운 ASCII 테이블 코드를 만들어버렸다.
그래서 조금 더 손을 봤고,
이 코드가 가장 깔끔하다고 느꼈다. 저렇게 ASCII 테이블으 값을 더하고 빼고 반복하는게 아니고 캐릭터에 - 'a' 값을 해줌으로 포지션 값을 구한다음에 total 을 더한후 26을 % 해주면은
'z' + 1 이 된다하더라도 위에 값을 구한 후에 'a' + pershift 해준다면은 맞는 캐릭터를 구할수 있었다. 물론 후에는 total 에 값을 첫번째 shift 값을 빼주면 성공이었다.
배운점:
1. Prefix Sum 비슷한 방식의 for 룹 돌리기
2. ASCII table 활용