C++ 공부 10일 차

 

오늘은 배열에 관한 문제들을 풀었습니다.

  • 7.5 (중복 숫자 제거) **
    10개의 숫자를 읽어 중복된 숫자는 한 번만 출력되도록 하는 프로그램을 작성하여라.

문제 7.5의 풀이 코드

3 : 함수 isSameNum의 헤더 작성

 - main

7 ~ 14 : 10개의 숫자를 입력받아서 arr에 저장합니다. for문 내에서 숫자 1개씩 입력 받으며 arr에 입력받은 숫자 n이 없다면 arr[i]에 n를 저장합니다.

15 ~ 21 : 입력받은 10개의 숫자 중 중복된 숫자를 제거한 숫자들을 출력하고 프로그램을 종료합니다.

 

 - isSameNum : arr에 숫자 n이 있는지 확인하는 함수.

25 ~ 31 : for문을 사용하여 배열 arr에 입력받은 숫자 n이 있는지 확인합니다. 만약 있다면 true를 반환합니다.

숫자 n이 없어서 for문이 종료된다면 false를 반환합니다.

아래는 7.5의 출력 결과입니다.

문제 7.5의 출력 결과

 

  • 7.14 (버블 정렬) **
    10개의 double형 값을 입력받고, 버블 정렬된 값을 출력하는 테스트 프로그램을 작성하여라.

문제 7.14의 풀이 코드(1)

 - main

3 ~ 5 : 함수 bubble, swap, printList의 헤더를 작성

9 ~ 13 : 10개의 double형 값을 입력받아 list에 저장합니다.

14 ~ 18 : bubble 함수를 사용하여 list를 버블 정렬 해준 뒤, printList 함수를 사용하여 list를 출력하고 프로그램을 종료합니다.

문제 7.14의 풀이 코드(2)

 - bubble : 인자로 받은 list를 버블 정렬하는 함수입니다.

21 ~ 31 : bool형 변수 changed를 선언하여 정렬하는 중에 버블(자리 바꿈)이 있는지 확인합니다.

do-while문을 이용하여 먼저 changed = false를 하고, for문으로 정렬을 시작합니다. 만약 list[j]가 list[j+1]보다 크다면 내림차순이므로 list[j]와 list[j+1]의 값을 서로 바꿔줍니다.(함수 swap 사용) 그러고 changed = true하여 버블이 있다고 알려줍니다. 만약 있다면 24 ~ 30를 다시 반복합니다.

 

 - swap : 입력받은 2개의 double값을 바꿉니다.

34 ~ 38 : temp 변수에 a를 저장, a에 b의 값을 저장, b에 temp(원래 a의 값)를 저장합니다.

 

 - printList : list의 원소들을 출력합니다.

41 ~ 44 : 인자 list의 원소들을 모두 출력합니다.

아래는 출력 결과입니다.

 

  • 7.17 (게임: 빈 머신) ***
    빈 머신을 시뮬레이션하는 프로그램을 작성하여라. 입력받는 공과 슬롯의 수는 최대 50입니다.
  • 빈 머신 부가 설명.
    빈 머신에 대한 사진
    위 사진처럼 생긴게 빈 머신으로, 공을 입구로부터 아래로 떨어뜨립니다. 공이 하단부로 떨어질 때 왼쪽 or 오른쪽으로 떨어질 확률은 각각 50%이며, 보드의 아래쪽 슬롯에 떨어진 공들이 누적됩니다.

문제 7.17의 풀이 코드(1)

6 ~ 8 : 함수 beanMachine, play, countR의 헤더 정의

 - main

12 : 난수를 발생하기 위해서 rand를 time(0)를 기준으로 초기화합니다.

13 ~ 16 : 사용자로부터 공과 슬롯의 수를 입력받습니다. 그리고 slot 배열을 선언하여 초기화합니다.

17 : beanMachine 함수를 실행합니다.

19 ~ 25 : slot 배열의 원소들을 출력합니다. 슬롯의 수인 size 만큼 출력하며, 22 ~ 23은 가독성을 위해서 5번째 슬롯마다 줄을 넘기게끔 했습니다.

27 : 프로그램을 종료합니다.

문제 7.17의 풀이 코드(2)

 - beanMachine : 빈 머신을 작동합니다.

31 ~ 34 : 공의 수만큼 반복하여 countR 함수를 실행하며, countR 함수의 결과값을 number에 저장합니다. countR의 결과값인 R의 수에 따라서 몇 번째 슬롯에 공이 들어갔는지 알 수 있기 때문에 slot의 number번째를 ++해줍니다.
(L의 수로도 가능하지만, 매번 size에서 뺀 값이 자리이기 때문에 R의 수로 하는게 간단하다.)

문제 7.17의 풀이 코드(3)

 - play : 공을 떨어뜨리고, 공이 떨어진 경로를 string으로 저장하여 반환합니다.

38 : 공이 떨어진 경로를 저장할 result를 선언하고, 초기화합니다.

39 ~ 45 : 공이 떨어질때마다 왼쪽 or 오른쪽을 결정하여 경로를 result에 추가하여 저장합니다. 0이면 왼쪽, 1이면 오른쪽입니다. 공이 떨어지는 횟수(왼쪽 or 오른쪽으로 가는 횟수)는 슬롯의 수와 같기 때문에 슬롯의 수만큼 반복합니다.

46 : 공이 떨어진 경로 result를 반환합니다. (result의 예 : LLRRRRLL, LLLLRRLLRRLRRR etc...)

문제 7.17의 풀이 코드(4)

 - countR : 입력받은 string의 R 개수를 반환합니다.

50 : 반환할 R의 개수 count를 선언, 초기화합니다.

51 ~ 54 : 슬롯의 수만큼 반복하며, 입력받은 playResult의 0번째부터 R이 있는지 확인하며 있으면 count++ 해줍니다.

55 : count를 반환합니다.

 

아래는 해당 프로그램의 출력 결과입니다.

문제 7.17의 출력 결과

'Week3' 카테고리의 다른 글

Week 3 - 21.08.12  (0) 2021.08.12
Week 3 - 21.08.10  (0) 2021.08.10
Week 3 - 21.08.09  (0) 2021.08.09

+ Recent posts