
오늘은 달리기반 2.8 숫자 야구 게임 문제를 풀었다.
오늘 학습 키워드
배열
오늘 학습 한 내용을 나만의 언어로 정리하기
-SequenceEqual()으로 배열 비교
Enumerable.SequenceEqual(a, b)는 배열 a와 b의 요소들의 순서와 내용이 모두 같으면 true, 두 배열에 모두 동일한 요소가 저장되어있지만, 다른 순서로 저장되어있으면 false가 리턴된다.
만약 arr1 객체가 null이 아니라면 아래와 같이 arr1.SequenceEqual(arr2) 처럼 직접 array에서 함수를 호출하여 다른 배열과 비교할 수 있다.
요소는 같지만, 순서가 다른 배열을 비교하는 방법
두 배열이 갖고 있는 요소들은 모두 동일하지만 순서만 다를 때가 있다.
순서 상관없이 요소 값만 비교하여 같은지 비교하고 싶다면, 배열을 미리 정렬하고 SequenceEqual()로 같은지 비교할 수 있다.
아래 예제에서 사용된 array.OrderBy()는 배열을 정렬하는 함수이며, 어떤 것을 key로 사용하여 정렬할 것인지에 대한 함수를 인자로 전달한다. 아래 예제에서는 int 요소 자체를 key로 사용할 것이기 때문에 (a => a)로 전달하면 된다.

학습하며 겪었던 문제점 & 에러
달리기반 2.8 숫자 야구 게임에서 SequenceEqual()으로 배열 비교를 사용했다. 하나는 난수로 입력한 숫자 배열이고, 다른 하나는 숫자를 문자열로 입력받아 문자 배열로 만들어 자리수 단위로 숫자를 하나씩 나누고 숫자로 변환시켰다.
입력값 난수
userGuess[0] = targetNumber[0] = 1
userGuess[1] = targetNumber[1] = 2
userGuess[2] = targetNumber[2] = 3
각 배열을 비교하면 이런식으로 출력되어서
이렇게 저장된 줄 알았다.
int[] targetNumber = {1, 2, 3}
int[] userGuess = {1, 2, 3}
하지만 Enumerable.SequenceEqual(a, b)을 사용하여 비교한 결과 userGuess를 변환하는 과정에서 잘못되었는지 false가 나왔다. 위의 예제를 테스트 했을 때는 잘 되었지만 내가 입력을 받고 변환하고 하는 과정에서 무언가 맞지 않았던 것 같다.
결국 왜 저렇게 되었는지는 해결하지 못했지만 야구게임은 다른 방식으로 해결했다.