5ffy   3년 전

아래 33번째줄을 boolean[][] 으로 선언해서 해결하긴 했습니다.

그런데 hashMap으로 했을 때 왜 안되는지가 궁금합니다. 제 머리로는 key값이 같은 값이면 해시 함수를 적용해도 똑같은 값이 나올거라 생각했습니다. 그래서 "x,y" 꼴로 키를 지정해서 boolean을 대체해주더라도 해결이 가능할거라 생각했습니다. 그런데 답이 틀리게 나오더라고요.. (아래 틀린 코드도 첨부하겠습니다.)

1. 잘못된 곳이 어느 부분인지 명확합니다. boolean을 hashMap으로 바꾸니 안됩니다. 그런데 이유가 뭘까요?ㅜ

2. 자바는 이렇게 2차원 좌표값을 hashMap으로 잘 처리하지 않나요? 만약 처리한다면 어떤식으로 처리하나요?

exponential_e   3년 전

코드를 자세히 보진 않았지만 질문하신 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만 존재하게 됩니다.  (이미지 참고해 주세요)

값이 누락되기 때문에 체크가 안되겠죠..

preview


만약 굳이 맵으로 표현하시겠다면, key: (x * 10의 제곱수 + y), value: 1 이런식으로는 저장이 가능 할 것 같습니다. (key가 중복되지 않도록)

다른 방식으로는 말씀하신 boolean이나, class 선언해서 사용하는 것이 일반적인 듯 합니다.

5ffy   3년 전

와 정성 드려 답변해주셔서 감사합니다!

저는String 값으로 x + "," + y 이렇게 넣어서 좌표의key값이 중복되지 않도록 했습니다. (추가로 말씀해주신 방법대로 x * P + y (P는 나올 수 있는 y의 가장 큰 값) 이렇게도 했는데 똑같이 답아 나오질 않아서 고민중에 있습니다 ㅜㅜ )

map을 삭제하고 put하고 하는 과정에서 문제가 있는걸까요...?

exponential_e   3년 전

저도 혹시나해서 코드를 자세히 읽어보니.. key 구분은 확실하게 하신 것 같은데("," 이용해서 문자열로 바꾸셨네요. 엉뚱한 답변 죄송합니다 ㅠㅠ)

'map을 삭제하고 put하고 하는 과정에서 문제가 있는걸까요...?' 저도 이게 조금 의심이되서 출력해보면서 체크해보니.. 삭제했는데 다시 entry에 포함되어있는 경우가 있는데,

로직을 전반적으로 이해하진 못해서 정확한 문제는 모르겠네요.ㅠㅠ 혹시 맵에 boolean 값이 어떤 방식으로 쓰이는 건지 설명해주실 수 있나요?

exponential_e   3년 전

우선 예제 1 ~ 3번은 오답코드 265번째 줄 deepCopy 전에 아래 코드를 추가해 초기화 시켜주시면 잘 나옵니다.

visited에 있으면 안될 값이 존재했습니다.. 

따라서 재귀가 끝난 후 temp를 visited에 복사시 temp의 값만 존재해야할 것 같은데, 그 외에도 부수적인 값들이 visited에 존재해 잘못된 답을 출력한 것 같습니다.

4번 예제는 잘못된 답이 나오는데.. 어떤 문젠지 정확히는 모르겠네요.

(또한, HashMap에 boolean 값을 변경은 하는데 따로 쓰지 않으시는 것 같습니다. 이게 뭔가 어색한데.. 문제가 있는진 모르겠습니다.)

5ffy   3년 전

와 진짜 친절하시다... 진짜진짜 감사합니다 절받으세여 지금 계실거 같은 방향으로 그랜절하고있습니다

boolean은 그냥 null값 넣고 key값의 존재 유무로 확인하려 했었습니다!

삭제했는데 entry에 있는 경우를 주시하며 다시 디버깅 하면서 어디가 문젠지 찾아봐야 겠네요 ㅎㅎ

저녁 맛있게 드시고 행복한 주말 보내세요!! :)

exponential_e   3년 전

아.. 아닙니다 ㅎㅎ

대충 문제점은 찾긴했는데, 지금 4번 예제가 {5 5 5} 당 40씩 점수를 얻게되고 따라서 120 + (5, 1회 = 10) = 130의 값이 나오게됩니다.

근데 결과값이 50만 나오는거 보니.. 주사위 10개를 모두 쓰는 경우가 적용이 안되고 있는게 아닌가 싶네요..

특히, 해당 예제에서 아래 코드 부분이 작동하지 않습니다.  (pos 값 최대: 4)

5ffy님도 좋은 주말 되시길 바랍니다~

5ffy   3년 전

시간내어 신경써주셔서 감사합니다 ㅜㅜ 

exponential_e님 말 듣고 왜 없어도 될게 자꾸 있는 거지 고민하다가 찾았습니다!!


203 line deepcopy() 부분 문제였습니다! 아래처럼 초기화 시켜주고 복사해주니 잘 되네요!! :) 

덕분에 암이 나았습니다 감사합니다 ㅎㅎㅎㅎ

엄청 친절하셔서 아까 해결이 잘 안된 상태인데도 기분 되게 좋았어요

복받으세요~~~~

댓글을 작성하려면 로그인해야 합니다.