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++ 해줍니다.