일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 대학교재
- 기술
- 소수경로
- 데이터처리
- C언어
- 빅데이터입문
- IT
- 혼공C
- Algorithm
- 혼자공부하는C언어
- c언어문제풀이
- 알고리즘
- c++
- 혼공씨
- 대학교재풀이
- 코딩테스트
- 코틀린
- PrimePath
- 문제해결
- 모두를위한 R데이터분석
- 빅데이터
- r
- 연습문제
- 초보
- 코딩연습
- 모두를위한R데이터분석입문
- 도전실전예제
- Python
- 코딩
- c프로그래밍
- Today
- Total
Jupitor's Blog
[코딩문제] 용병과 식인종 본문
Write a program that solves the following problem: Three missionaries and three cannibals
come to a river and find a boat that holds two people. Everyone must get across the
river to continue on the journey. However, if the cannibals ever outnumber the missionaries
on either bank, the missionaries will be eaten. Find a series of crossings that will
get everyone safely to the other side of the river.
다음 문제를 해결할 프로그램을 짜라 : 세 명의 용병과 세 명의 식인종이 2명을 태울 수 있는 보트가 있는
강에 도착했다. 여정을 계속하기 위해 하나도 빠짐없이 강을 건너야 한다. 그런데, 만약에 강 한쪽 편에
식인종의 수가 용병의 수보다 많을 경우, 그 쪽 용병은 잡아먹힐 것이다.
모두가 안전하게 강 건너편으로 건널 수 있는 일련의 행동을 찾아라.
마찬가지로 Resursion으로 풀었다.
여기서도 행동할 수 있는 가짓 수는 5개.
1. 보트를 옮긴다.
2. 용병을 태운다
3. 용병을 내린다.
4. 식인종을 태운다.
5. 식인종을 내린다.
이번에는 성공했을 때 행동들을 저장해두어야 한다.
각 행동들을 나타내는 함수들이다.
recursive 호출을 할 함수이다.
강 왼편에서 우측으로 간다고 상정하고
lm = left mercenary
lc = left cannibal
rm, rc = right mercenary, cannibal
b = boat 위치
ob = boat에 타고있는 사람 수. tuple로 ob[0]은 용병 수, ob[1]은 식인종 수이다.
m은 일련의 행동들을 저장해두는 list이다.
0 : 보트 움직이기
1, 2 : 용병 태우기, 내리기
3, 4 : 식인종 태우기, 내리기
컴퓨터가 찾아낸 행동의 순서를 살펴보자.
1. 먼저 식인종을 태운다
2. 용병을 태운다
3. 건너편에 가서 용병을 내린다.
4. 다시 이쪽으로 와서 식인종을 태운다.
5. 건너편에 식인종을 내린다 (보트에는 식인종이 1명 계속 타고 있음)
6. 와서 용병을 태운다
7. 건너편에 용병을 내린다
8. 이쪽에서 식인종을 태운다
9. 건너편에서 식인종을 내린다
10. 다시 와서 용병을 태운다
11. 건너편에 내린다
12. 식인종을 태운다(?)
13. 식인종을 둘다 내린다.
위와 같이 코딩을 하게 되면 n명의 용병과 m명의 식인종에 대해서 문제를 해결할 수 있다.
대신 n 은 m 이상.
예를 들어 용병 5명에 식인종 4명일 경우
'IT > 알고리즘' 카테고리의 다른 글
[코딩문제] : 두 물통 문제 (0) | 2021.09.14 |
---|---|
[Python] 중위 -> 후위, 전위 수식 변환, 수식 계산, html 태그 체크 (0) | 2021.08.17 |
[Python] 스택, 큐, 더블큐, 괄호 체크, 10진수 -> 2진수, 10진수 -> n진수 (0) | 2021.08.17 |
[Python] 시어핀스키와 하노이 (0) | 2021.08.17 |
nhn 그룹사 신입 개발자 공개채용 프리테스트 1 기출문제 (0) | 2020.09.28 |