IT 지식/CS 기초

가장 큰 수 찾기

Security Engineer 2024. 8. 11. 00:12

카드를 나열하는 방법

그림1 - 카드 나열

  • 모든 카드는 그림1과 같이 뒷면이 보이도록 나열하며, 카드 앞면에는 0~4까지 숫자가 적혀있으며 같은 숫자는 없다고 가정한다.
  • A는 B의 지시에 따라 카드를 뒤집어 볼 수 있다.
  • B는 카드를 한 번에 두 장만 뒤집어 보라고 A에게 부탁할 수 있으며 A는 두 카드 중 어떤 카드의 값이 더 큰지 알려준다. 단 숫자를 알려주지는 않는다.
  • A의 답을 듣고 B가 원한다면 두 카드의 위치를 바꿀 수 있다.
  • 어떤 카드부터 어떤 순서로 뒤집어 볼지는 온전히 B의 마음이다.
  • 이제 가장 적은 회수로 카드를 뒤집어 보고 가장 큰 수를 찾거나, 가장 작은 수를 찾아본다.

 

 

가장 큰 숫자 찾기

  1. 기준 카드와 대상 카드1을 비교한다. (시작)
  2. 대상 카드1이 크면 기준 카드와 자리를 바꾼다.
  3. 기준 카드와 대상 카드2를 비교한다.
  4. 대상 카드2가 크면 기준 카드와 자리를 바꾼다.
  5. 기준 카드와 대상 카드3을 비교한다.
  6. 대상 카드3이 크면 기준 카드와 자리를 바꾼다.
  7. 기준 카드와 대상 카드4를 비교한다.
  8. 대상 카드4가 크면 기준 카드와 자리를 바꾼다.

 

 

가장 큰 숫자 찾기를 반복하기

  1. 기준 카드와 그 다음 카드를 비교한다.
  2. 그 다음 카드가 크면, 기준 카드와 자리를 바꾼다.
  3. 아직 비교할 카드가 남아 있다면 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 출력

 

 

 

 

 

 

 

 

 

참고

https://www.inflearn.com/course/%EB%84%93%EA%B3%A0%EC%96%95%EA%B2%8C-%EC%BB%B4%EA%B3%B5-%EC%A0%84%EA%B3%B5%EC%9E%90