1. 5개의 가방이 있습니다. 각 가방에는 10개의 구슬이 들어있습니다. 4개의 가방에는 구슬 한개당 10 gram 구슬이 들어있고, 나머지 하나에는 9 gram 구슬이 들어있습니다. 단 한번 무게 재는 것을 허용합니다. 어떻게 가벼운 가방을 알 수 있을 까요?(양팔 저울이 아닙니다. 무게를 재는 저울입니다(one-tray))
펼쳐두기..
답 : 9의 성질을 이용한 무게 문제 입니다. 각 가방에서 구슬을 꺼내 저울에 달게 되면 10으로 나눈 나머지는 항상 9의 배수(10으로 나눈) 즉, 9 gram 구슬 무게 밖에 남지 않습니다. 본 성질을 이용해서 가방의 순서대로 구슬을 각출 할 경우, 예를 들자면 첫번째 가방에서는 하나의 구슬을 두번째는 두개의 구슬을 세번째는 세개의 구슬을 꺼낸다면, 구슬들을 저울에 한번에 올려 무게를 확인 한 후, 10으로 나누면 9 gram이 든 가방의 순서를 확인 할 수 있습니다.
ex) 만약 3번째에 9gram이 있을 경우 총 구슬의 무게는
1 : 10 gram
2 : 20 gram
3: 27 gram
4 : 40 gram
5 : 50 gram
총 147 gram / 10 = 7gram == 9 * 3 / 10 과 같으므로 3번째가 답이라는 것을 알 수 있는 것입니다. ^^
2. 양 갈래 길이 있습니다. 각각의 길은 참 마을 혹은 거짓마을로 가는 길입니다. 하루에 한번씩 양 마을에서 한명이 나와 길을 안내합니다. 참 마을 사람은 진실만, 거짓 마을 사람은 거짓만을 대답합니다. 어떻게 질문 해야 거짓 마을로 갈 수 있을까요?(길 안내인은 '예' '아니오' 로만 대답합니다.)
펼쳐두기..
답) "이쪽 마을이 당신이 사는 마을 입니까?" "아니오" 정방향 마을 선택
"예" 반대방향 마을 선택
case 1 ) 참 마을 사람에게 거짓마을 쪽을 가르키며 질문한 경우 답변은 "아니오"
거짓 마을에게 거짓 마을 쪽을 가르키며 질문한 경우 답변은 "아니오"
case 2) 참 마을 사람에게 참마을 쪽을 가르키며 질문한 경우 답변은 "예"
거짓 마을에게 참 마을 쪽을 가르키며 질문한 경우 답변은 "예"
매우 오래전에 나왔던 고전적인 논리 문제 입니다. ^^ 많은 분들께서 아셨을 꺼라 생각 듭니다.
3. 아래의 코드에서 한 자를 변화시켜 "9" 가 20번 나오게 해보세요.(추가나 삭제 아닙니다.)
int main()
{
int i , n=20;
for(i =0 ; i < n ; i--)
printf("9");
} |
펼쳐두기..
답) for(i =0 ; i < n ; n--), for(i =0 ; i + n ; n--)
C프로그램 이었는데요.. 혹시라도 돌려 보시고 싶다~ 하시면 저희 동호회 자료실 DevCpp 란 프로그램을 사용 하시면 됩니다.
4. 다음에 들어올 값은?
18, 46, 94, ?, 52, 61, 9, 4, 1 |
펼쳐두기..
답) 63 (6의 자승 후 자리수 변경)
맨 오른쪽 부터 1,2,3,4,5,6,7,8,9 의 자승 이었습니다.
18 -> 81, 46 -> 64 로 살짝 결과 값을 변경 시켜놓은 문제였습니다.
5. 키가 서로 다른 100 명의 사람이 있습니다.. 키 순서에 따라 줄을 세우고 무작위로 흰 모자 혹은 검은 모자를 맨 뒤(키가 가장큰사람) 부터 머리에 씌웠습니다. 자기 자신은 자신이 무슨 모자를 썻는지 알 수 없습니다. 대신, 뒤의 사람은 그 앞에 있는 모든 사람이 어떤 모자를 썻는지 확인 할 수는 있습니다. 이 100명의 사람들은 토의를 거친 후, 줄을 섰고 한번은 99명이 자신의 모자를 알아 맞췄고, 한번은 100명의 모든 사람이 자신의 모자를 맞췄습니다. 어떻게 한 걸까요? (질문은 키가 가장큰 맨 뒷사람부터 키가 가장 작은 맨 앞 사람까지의 순서로 합니다.)
추가 : Rule -
1. 100명의 사람이 키 순서에 따라 줄을 선다.
2. 키가 제일 큰 맨 마지막 사람부터 무작위(흰색 혹은 검은 모자) 모자를 씌운다.
3. 자기 자신은 자신이 무슨 색 모자를 썻는지 모른다.
4. 진행자가 키가 제일 큰 사람부터 무슨 모자를 썻는지 질문 한다.(맨뒤에서 부터 한사람씩 앞으로 가며 질문)
5. 질문을 들은 답변자는 "검정 혹은 흰색" 으로만 답변 가능하다.(몸의 행동 등 불가)
6. 본 게임이 진행 되기전 100명의 사람은 상위 Rule을 이해 하고 토의를 할 기회를 1회받는다.
7. 키가 큰 뒤의 사람은 키가 작은 앞의 모든 사람들의 모자 색을 확인 할 수 있다.
8. 100명의 사람 전부 혹은 최소한 99명의 사람이 자기 자신의 모자 색을 맞추는 방법은?
펼쳐두기..
답) 맨 마지막에 있는 남자가 앞에 서있는 99명의 흰색 모자 갯수를 세어 짝수 일경우 흰 모자를 홀수 일경우 검은 모자를 선택 하면 됩니다. 그 다음 답변자는 뒷 사람의 정보를 참고하여 자신의 모자 색을 맞추면 됩니다. 가령 맨 마지막 사람이 흰색 모자를 선택했다면 자신을 포함하여 흰색 모자 쓴사람이 짝수인 것입니다. 앞서 98명의 모자 중 흰색 모자가 짝수 인경우 자신은 검정모자라고 답변 하면 되고, 만약 흰색 모자가 홀 수 일경우는 자신의 모자는 흰색 모자라는 사실을 알게 됩니다. 그 다음 사람도 이와 같은 방식으로 문제를 해결 하면 됩니다.
관련 기술 : 패리티 Check
1. 기수(홀수) 패리티 체크방식
- 데이터 비트속에 추가시킨 패리티 비트의 개수가 홀수일 경우 에러 '무'
2. 우수(짝수) 패리티 체크방식
- 데이터 비트속에 추가시킨 패리티 비트의 개수가 짝수일 경우 에러 '무'
댓글 없음:
댓글 쓰기