오늘의 코드카타는 자릿수 더하기였다. 자연수 N이 주어지면 N의 자릿수를 전부 더하여 return 하는 함수를 작성하는 것이었다. ex) 123 → 6
나는 처음에 for문을 사용하여 일의 자릿수부터 더하는 방식으로 문제를 접근했다.
public int solution(int n)
{
int answer = 0;
for(int i = 1; i < n; i *= 10)
{
answer += n % (i * 10) / i;
}
return answer;
}
내가 생각한 방법은, n을 i 10으로 나눈 나머지를 구한 뒤, 그 나머지에 i를 나누어 자릿수를 구하는 방식이었다. 예를 들어 123의 경우, 처음 1의 자리를 구할 때 123을 i 10으로 나눈 나머지인 3에 i를 나누어 1의 자리수를 구하는 방식이었다.
그러나 이 방식으로 했을 때, 문제가 발생했다. 만약 맨 앞 두자리 수가 10이라면, i를 통해 나누어줄 때 완전히 나누어져 0이 나왔기 때문이다. 예를 들어 100의 경우, 백의 자릿수를 구한다고 가정해보자. 100 / i를 할 때 i가 100이면 완전히 나누어져 0이 나오게 된다. 결국 결과가 0이 나오게 되어 틀리게 되는 것이었다!
때문에 다른 방식을 고민하던 나는 차라리 나눗셈을 하는 것은 어떨까라는 생각을 했다. N을 10으로 나눈 나머지를 sum해주고 n /= 10을 하면 내가 구한 자릿수를 제외시킬 수 있었기 때문이다.
public int solution(int n)
{
int answer = 0;
while(n != 0)
{
answer += n % 10;
n /= 10;
}
return answer;
}
만약 123의 자릿수의 합을 구할 경우, 123 % 10을 한 3을 answer에 더해준다. 이후, n은 123 / 10을 통해 12가 저장된다.
다시 12 % 10을 하여 2를 answer에 더해준 뒤, n /= 10을 하여 1이 저장된다.
이후, 1 % 10을 하여 answer에 1을 더해준 뒤, n /= 10을 하여 n에는 0이 저장된다.
결국 n == 0이 되었기 때문에 while문을 나오게 되고, answer를 return하게 된다.
오늘 팀원분께서 우리 작업물을 MainScene에 합치신 것을 받아 확인을 해보고 있었다. 그러다 문제를 발견했는데, 게임 종료 팝업창에 만들어 놓은 버튼이 클릭이 안되는 문제가 발생했던 것이다!
코드를 이리 저리 살펴보며 문제를 찾아보려 애를 썼지만 찾지 못하고 있었다. 자포자기 하는 심정으로 구글에 검색을 해보니 문제를 매우 쉽게 해결할 수 있었다.
문제는 EventSystem이 없어서 발생한 문제였다! 우리 작업물을 복사 붙여넣기 하는 과정에서 EventSystem이 누락되어 발생한 문제였다. 다음에도 같은 문제를 겪게 될 경우, EventSystem이 있는지 확인해보자!
따로 정리해두었다!
https://velog.io/@amberjack/유니티-Slider로-Volume-조절하기
플레이어의 최고 기록을 Json 파일로 읽고 쓰기.
최고 기록을 1 ~ n등 까지 출력해주기.
오늘 우리는 팀 프로젝트의 필수 요구 사항들을 모두 끝낼 수 있었다. 다행이긴 한데, 요구 사항을 거의 하지 못해 아쉽다. 그래도 팀원들끼리 상의해서 최고 점수를 띄워주는 것까지는 해보기로 얘기가 되었다. 어려운 문제이긴 한데... 열심히 되는 데까지 해보기로 했다.