카드를 나열하는 방법
- 모든 카드는 그림1과 같이 뒷면이 보이도록 나열하며, 카드 앞면에는 0~4까지 숫자가 적혀있으며 같은 숫자는 없다고 가정한다.
- A는 B의 지시에 따라 카드를 뒤집어 볼 수 있다.
- B는 카드를 한 번에 두 장만 뒤집어 보라고 A에게 부탁할 수 있으며 A는 두 카드 중 어떤 카드의 값이 더 큰지 알려준다. 단 숫자를 알려주지는 않는다.
- A의 답을 듣고 B가 원한다면 두 카드의 위치를 바꿀 수 있다.
- 어떤 카드부터 어떤 순서로 뒤집어 볼지는 온전히 B의 마음이다.
- 이제 가장 적은 회수로 카드를 뒤집어 보고 가장 큰 수를 찾거나, 가장 작은 수를 찾아본다.
가장 큰 숫자 찾기
- 기준 카드와 대상 카드1을 비교한다. (시작)
- 대상 카드1이 크면 기준 카드와 자리를 바꾼다.
- 기준 카드와 대상 카드2를 비교한다.
- 대상 카드2가 크면 기준 카드와 자리를 바꾼다.
- 기준 카드와 대상 카드3을 비교한다.
- 대상 카드3이 크면 기준 카드와 자리를 바꾼다.
- 기준 카드와 대상 카드4를 비교한다.
- 대상 카드4가 크면 기준 카드와 자리를 바꾼다.
- 끝
가장 큰 숫자 찾기를 반복하기
- 기준 카드와 그 다음 카드를 비교한다.
- 그 다음 카드가 크면, 기준 카드와 자리를 바꾼다.
- 아직 비교할 카드가 남아 있다면 1번으로 이동한다.
- 끝
정답
가장 큰 수 찾기 → 4회
가장 작은 수 찾기 → 4회
오름차순 나열 → 4+3+2+1 = 10회
내림차순 나열 → 4+3+2+1 = 10회
C언어 + 한글로 가장 큰 수 찾기 코드 작성
void main(){
배열 대상카드[5];
다음_카드_인덱스 = 1;
기준카드 = 카드[0];
if(기준카드와 대상카드[다음_카드_인덱스]비교)
다음 카드가 크니까 위치 교환;
if(다음_카드_인덱스가 끝이 아님?){
다음_카드_인덱스 1 증가;
goto 5번;
}
프로그램 끝;
}
파이썬으로 코드 작성
- 파이썬에는 max와 min이라는 메소드가 있어 특정 리스트 내에 가장 큰 수와 작은 수를 바로 출력할 수 있다.
- max와 min을 사용하지 않고 가장 큰 수와 작은 수를 출력해본다.
< max와 min 메소드를 사용하는 경우 >
card = [3,1,5,2,4]
print(max(card))
print(min(card))
< max와 min 메소드를 사용하지 않고 가장 큰 수 찾기 >
card = [3,1,5,2,4] # card 변수에 임의의 숫자 넣기
max_value = card[0] # max_value = 기준 카드 0번
for i in range(1, len(card)): # i를 활용하여 1 ~ 4 까지 반복, len(card)=카드 개수
if max_value < card[i]: # max_value가 card[i] 보다 작은 경우, card[i]=대상 카드 i
max_value = card[i] # max_value와 card[i]의 위치를 바꾼다.
print(max_value) # max_value 출력
< max와 min 메소드를 사용하지 않고 가장 작은 수 찾기 >
card = [3,1,5,2,4] # card 변수에 임의의 숫자 넣기
min_value = card[0] # min_value = 기준 카드 0번
for i in range(1, len(card)): # i를 활용하여 1 ~ 4 까지 반복, len(card)=카드 개수
if min_value > card[i]: # min_value가 card[i] 보다 큰 경우, card[i]=대상 카드 i
min_value = card[i] # min_value와 card[i]의 위치를 바꾼다.
print(min_value) # min_value 출력
참고
'IT 지식 > CS 기초' 카테고리의 다른 글
API와 SDK (0) | 2024.08.14 |
---|---|
컴파일과 인터프리터, 고급어 저급어 (0) | 2024.08.13 |
프로그래밍이란? (0) | 2024.08.10 |
가상 메모리란? (0) | 2024.08.09 |
컴퓨터의 구성 요소 (H/W, User mode, Kernel mode) (0) | 2024.08.08 |