원소의 범위가 1에서 20까지이기 때문에 x를 그대로 사용할 경우 최하위 비트는 무의미해집니다. 그걸 보완하기 위함으로 보이는데, 사실 이 문제의 경우는 그렇게 할 필요는 없습니다. x-- 를 하지 않는 대신 32번째 줄을 s = (1 << (n + 1)) - 1; 로 해줘도 될 듯합니다.
11723번 - 집합
문제에서 주어진 집합 S에 원소 0이 포함되지 않게 하기 위한 것이라고 이해했는데 맞나요?
무슨 뜻인지 잘 모르겠네요. x--; 를 하는 것과 안 하는 것의 차이는 오로지,
1. x--를 했다는 건, 1 = 최하위 비트, 2 = 아래에서 2번째 비트, 3 = 아래에서 3번째 비트, ... 20 = 아래에서 20번째 비트로 표현하겠다는 뜻이고,
2. x--를 안 했다는 건, 1 = 아래에서 2번째 비트, 2 = 아래에서 3번째 비트, 3 = 아래에서 4번째 비트, ... 20 = 아래에서 21번째 비트로 표현한다는 뜻이라는 것 뿐입니다.
어느 경우에도 0은 포함되지 않고, 문제에서 0은 범위로 주어지지 않았으니 0에 대한 고려는 전혀 할 필요가 없습니다.
커피라도 사드리고 싶네요ㅠㅠ!
자세한 답변 감사해요!!!!!
댓글을 작성하려면 로그인해야 합니다.
kimhana0525 6년 전
scanf로 받은 x값에서
왜 1을 빼고 나서 shift연산을 해야 하는지 아시나요???ㅠㅠ
소스코드 라인 15,18,21,29에서 x--; 를 하는게 이해가 안되용..