코드를 자세히 보진 않았지만 질문하신 2번 내용 기반으로 설명드리자면,
HashMap을 통해서 좌표를 표현할 수 있냐면, 그건 맞지만 key: x, value: y 이런식으로 표현할 수는 없습니다.
HashMap은 key의 중복을 허용하지 않기 때문인데요. 만약 아래와 같이 입력을 한다면,
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 2);
map.put(1, 3);
해쉬맵에는 중복 key: 1로 인해 1, 3만 존재하게 됩니다. (이미지 참고해 주세요)
값이 누락되기 때문에 체크가 안되겠죠..
만약 굳이 맵으로 표현하시겠다면, key: (x * 10의 제곱수 + y), value: 1 이런식으로는 저장이 가능 할 것 같습니다. (key가 중복되지 않도록)
다른 방식으로는 말씀하신 boolean이나, class 선언해서 사용하는 것이 일반적인 듯 합니다.
5ffy 3년 전
아래 33번째줄을 boolean[][] 으로 선언해서 해결하긴 했습니다.
그런데 hashMap으로 했을 때 왜 안되는지가 궁금합니다. 제 머리로는 key값이 같은 값이면 해시 함수를 적용해도 똑같은 값이 나올거라 생각했습니다. 그래서 "x,y" 꼴로 키를 지정해서 boolean을 대체해주더라도 해결이 가능할거라 생각했습니다. 그런데 답이 틀리게 나오더라고요.. (아래 틀린 코드도 첨부하겠습니다.)
1. 잘못된 곳이 어느 부분인지 명확합니다. boolean을 hashMap으로 바꾸니 안됩니다. 그런데 이유가 뭘까요?ㅜ
2. 자바는 이렇게 2차원 좌표값을 hashMap으로 잘 처리하지 않나요? 만약 처리한다면 어떤식으로 처리하나요?