1004번 - 어린 왕자
다른 방법으로 풀어서 맞긴 맞았으나 비트마스크로 푼 풀이가 계속 틀려 질문드립니다.
각 행성마다 for문을 돌면서 만약 i 번째 행성이 시작점을 포함하면 a 에 1 << i 를 넣고, 도착점을 포함하면 b 에 1 << i 를 넣고
마지막에 a 와 b 를 XOR 한 결과중 1의 개수를 출력하도록 했습니다.
이러면 시작점을 포함하는 행성의 개수 + 도착점을 포함하는 행성의 개수 - 둘 다를 포함하는 행성의 개수가 구해진다고 생각했습니다..
제가 시도해본 건 다음과 같습니다.
1. 혹시나 입력으로 (1 << i) 가 64비트를 넘기는 n이 들어오나 싶어서 어썰트를 걸어봤지만 그런 문제는 없었습니다.
2. 19번째 줄을 long long 으로도 해보고 unsigned long long 으로도 해봤습니다.
3. 24, 27번째 줄의 |= 를 += 로 바꿔봤습니다.
비트마스크를 이용해본게 처음이라 제가 어느 부분에서 놓치고 있는지 파악하기 어렵네요..
도움 주시면 감사드리겠습니다!
(1LL << i)
으로 하면 맞아요 (1 << i : int)
와 감사합니다!!!
하나 배우고 갑니다
댓글을 작성하려면 로그인해야 합니다.
godmoon00 6년 전
다른 방법으로 풀어서 맞긴 맞았으나 비트마스크로 푼 풀이가 계속 틀려 질문드립니다.
각 행성마다 for문을 돌면서 만약 i 번째 행성이 시작점을 포함하면 a 에 1 << i 를 넣고, 도착점을 포함하면 b 에 1 << i 를 넣고
마지막에 a 와 b 를 XOR 한 결과중 1의 개수를 출력하도록 했습니다.
이러면 시작점을 포함하는 행성의 개수 + 도착점을 포함하는 행성의 개수 - 둘 다를 포함하는 행성의 개수가 구해진다고 생각했습니다..
제가 시도해본 건 다음과 같습니다.
1. 혹시나 입력으로 (1 << i) 가 64비트를 넘기는 n이 들어오나 싶어서 어썰트를 걸어봤지만 그런 문제는 없었습니다.
2. 19번째 줄을 long long 으로도 해보고 unsigned long long 으로도 해봤습니다.
3. 24, 27번째 줄의 |= 를 += 로 바꿔봤습니다.
비트마스크를 이용해본게 처음이라 제가 어느 부분에서 놓치고 있는지 파악하기 어렵네요..
도움 주시면 감사드리겠습니다!