2024.08.27 - [사전캠프/달리기반] - 달리기반 LV.3 숫자 야구 게임
달리기반 퀘스트 8번, 숫자야구 게임을 끝냈습니다.
해당 부분에서 입력받은 3자리 숫자값을 자리수에 맞추어 배열에 어떻게 저장할것인지를 고민했었는데,
처음에는 반복문 없이 간단하게 배열에 직접 넣어는 방식으로 만들었었습니다.
//100의 자리수 저장
userGuess[0] = inputInt / 100;
//10의 자리수 저장
userGuess[1] = (inputInt - userGuess[0] * 100) / 10;
//1의 자리수 저장
userGuess[2] = (inputInt - userGuess[0] * 100 - userGuess[1] * 10);
하지만 이런 방식은 확장이 까다롭고, 각 배열의 자리 값을 직접 사용하는것이 마음에 들지 않아 반복문을 사용하는쪽으로 변경하게 되었습니다.
일단 각 자리수를 뽑아내는 공식이 필요했는데, int로 변환한 입력값을 유지하려고 했으나, 그럴 방법은 딱히 생각나는것도 없을 뿐더러 변수를 따로 저장하는것도 비효율적이라 판단해 해당 값의 10의 나머지를 저장하고, 본인 변수를 10으로 나누어 저장하는 방식을 택했습니다.
그러면서 for문을 먼저 사용하여 해당 포스트에 사용한 코드를 완성하였습니다.
for(int k = 0; k < input.Length; k ++)
{
userGuess[k] = inputInt % 10;
inputInt /= 10;
}
이 코드를 작성한 후, for문의 조건식을 입력값의 길이로 판단하지 않을수는 없을까 생각했고, while문의 조건으로 10으로 나눈 입력값이 0이 되면 (10으로 나누지 못하게 되면) 반복을 종료하면 되겠구나 하는 생각이 들어 while문을 사용하는것을 추가로 만들어보았습니다.
int whileNum = 0;
while (inputInt > 0)
{
userGuess[whileNum] = inputInt % 10;
inputInt /= 10;
whileNum++;
}
이후 이 코드로 테스트를 해보던중, 무작위 생성값을 그대로 입력하여도 스트라이크가 2까지만 나오는것을 보았고, 100의 자리수가 0일때 이러한 현상을 보게 되어, 마지막에 해당 코드를 언급하고, 비교될 값을 0으로 초기화 해서 사용해야 한다는 내용을 추가로 적게 되었습니다.
'사전캠프 > TIL' 카테고리의 다른 글
사전캠프 09/05 TIL (0) | 2024.09.05 |
---|---|
사전캠프 08/26 TIL (0) | 2024.08.26 |
사전캠프 08/23 TIL (0) | 2024.08.23 |
사전캠프 08/22 TIL (0) | 2024.08.22 |
사전캠프 08/21 TIL (0) | 2024.08.21 |