Search

LV07 재귀함수 탐색 순서

재귀함수를 탐색하다 보면 밑 그림과 같이 무수히 많은 함수중 어떤 함수를 실행하고 있는지 따로 체크를 하지 않으면 탐색하기가 어렵다.
특히 디버깅을 하거나 할때 잊어버리기 쉽상이다.
그래서 함수에 들어가기 전에 해당 함수의 위치를 배열에 기록해두려 합니다.
기록해두기 위한 배열을 만들어 두고 한단계 밑으로 레벨이 증가할때마다 배열의
인덱스(레벨)로 해당 들어가는 위치,또는 방향을 기록해두면 됩니다.
#include <iostream> char path[10] = ""; char name[10] = "ABC"; void run(int level) { if (level == 5) { std::cout << path; std::cout << std::endl; return; } //path[level] = 'A'; //run(level + 1); //path[level] = 0; //path[level] = 'B'; //run(level + 1); //path[level] = 0; for (size_t i = 0; i < 3; i++) { path[level] = name[i]; run(level + 1); path[level] = 0; } } int main() { run(0); return 0; }
C++
복사

다차원 배열(multi-dimensional array)

다차원 배열이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미합니다.
즉, 2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이며,
3차원 배열은 배열 요소로 2차원 배열을 가지는 배열이고,
4차원 배열은 배열 요소로 3차원 배열을 가지는 배열인 것입니다.

연습문제

재귀호출을 하다 보면 어느 시점에 있는지 정확히 알기 힘듭니다.
path전역배열을 이용하면 경로를 알 수 있습니다!
재귀호출에서 필수로 알아야 하는 path를 이해해봅시다.
경로를 출력하자
문제 1번
Level2에 도달했을 때마다, path를 모두 출력 해주세요.

출력 결과

AA
AB
AC
BA
BB
BC
CA
CB
CC
같은문장 찾기
문제 2번
<cstring> strcmp를 사용해서 문제를 풀어주세요.
세문장을 입력 받으세요. (최대글자는 10글자)
세문장이 모두 같으면 "WOW"
두문장이 같으면 "GOOD"
모두 다르면 "BAD" 를 출력 해주세요.

입력 예제

abcd
abcd
abcd

출력 결과

WOW
경로 이름은 BGTK
문제 3번
다음과 같은 구조로 Level을 입력받고
입력받은 Level에 도달했을 때
path를 출력 해주세요.
(2 <= LEVEL <= 4)

입력 예제

2

출력 결과

BB
BG
BT
BK
GB
GG
GT
GK
TB
TG
TT
TK
KB
KG
KT
KK
Up & Down
문제 4번
up 또는 down 문장을 5개 입력 받으세요.
주인공이 1층에 서있는데
up이 입력으로 들어오면 2층으로 가고 (up 입력시 한층 올라감)
down이 들어오면 B1층으로 갑니다. (down 입력시 한층 내려감)
up/down 을 5회 입력 받았을 때 주인공의 위치를 출력 하세요.
ex)
입력:
up
down
down
down
down
출력: B3

입력 예제

up
down
down
down
down

출력 결과

B3
청소당번
문제 5번
1 ~ n 명의 친구가 4일치 청소당번 순서를 정하려고 합니다.
첫번째 친구가 4일치 모두 청소할 수도 있고, 다양한 경우가 발생합니다.
ex) n = 3명일때 가능한 청소스케쥴
1111 / 1112 / 1113 / 1121 / 1122 / ... / 3332 / 3333
n명에 대해, 4일 동안의 청소스케줄을 모두 출력하는 프로그램을 작성해주세요.

입력 예제

2

출력 결과

1111
1112
1121
1122
1211
1212
1221
1222
2111
2112
2121
2122
2211
2212
2221
2222
가장 긴문장, 짧은 문장은 어디에
문제 6번
string 1차원 배열에 네문장을 입력 받으세요.
가장 긴 문장과 가장 짧은 문장이 몇번째 index에 있는 문장인지 index를 출력 해주세요
ex)
[입력]
apple
microsoft
google
xiaomi
[출력]
긴문장:1 //(microsoft)
짧은문장:0 //(apple)
[hint]
문장의 길이를 구하는 방법
string a = "mincoding";
int len = a.length();

입력 예제

apple
microsoft
google
xiaomi

출력 결과

긴문장:1
짧은문장:0
몇번째 행운
문제 7번
위와 같은 트리모양으로 재귀호출 프로그램을 만드려 합니다.
Level 3에 도착했을때 입력 받은 PATH가 몇번째로 만들어지는지 출력 해주세요.
ex)
AAA   =>  1번째

입력 예제

AAD

출력 결과

4번째
3차 배열에서 MAX MIN 찾기
문제 8번
아래와 같이 3차 배열을 하드코딩 해 주세요
숫자 한개를 입력 받고, 입력받은 위치의 MAX와 MIN값을 출력 해 주세요
ex) 만약 0을 입력받았다면 [0]에 해당하는 곳에서 MAX값과 MIN값을 출력 하면 됩니다
MAX=5
MIN=1

입력 예제

1

출력 결과

MAX=6
MIN=2
암호 해독하기
문제 9번
암호표에 암호문들이 있습니다.
암호문을 입력 받아주세요.
암호가 맞으면 "암호해제" 라고 출력,
암호가 틀리면 "암호틀림" 라고 출력 해주세요.

입력 예제

abc

출력 결과

암호틀림

복습문제

3차배열과 문자의 발견여부
문제 1번
위 3차배열을 하드코딩 해주세요
그리고 문자 1개를 입력 받아주세요
3차배열에 입력받은 문자가 존재하면 "발견", 없다면 "미발견"이라고 출력 해주세요

입력 예제

T

출력 결과

발견
바람둥이
문제 2번
나에게 호감을 갖고 있는 n명의 친구들이 있습니다.
이 중 누구와 데이트할지 ox로 데이트 조합을 출력해보려고 합니다.
n을 입력받고 그에 따른 데이트 조합을 모두 출력 해주세요.

입력 예제

2

출력 결과

xx
xo
ox
oo
문자를 채우다
문제 3번
3 x 3 x 3 으로 구성되어 있는 3차 배열을 선언 해 주세요
그리고 문자 하나를 입력 받습니다
아래 예시와 같이 입력 받은 문자부터 순차적으로 값을 채워주세요
ex) 만약 문자 A를 입력하였다면 아래와 같이 채우고 출력
ex) 만약 문자 B를 입력하였다면 아래와 같이 채우고 출력

입력 예제

A

출력 결과

AAA
AAA
AAA
BBB
BBB
BBB
CCC
CCC
CCC
한줄a 한줄b
문제 4번
숫자 2개를 변수 a, b에 입력 받습니다
아래의 규칙에 따라 값을 채워주세요
만약 a에 1, b에 3을 입력 받았다면, 아래와 같이 채우고 출력하면 됩니다.

입력 예제

1 3

출력 결과

1 1 1
3 3 3
1 1 1
3 3 3
1 1 1
3 3 3
문제 5번
문자 2개를 입력 받으세요.
MAP 배열에서 찾을 값을 이용해 price 배열의 값을 찾아야 합니다.
예를들어,
만약 "B3"을 입력 받았다면 MAP 배열에서 3을 찾을 수 있고
price배열의 3번에 해당하는 문자 G를 출력 하면 됩니다.

입력 예제

B 3

출력 결과

G
문장 정렬
문제 6번
길이가 다른 네 문장을 입력 받으세요. (최대글자는 10글자)
가장 짧은 문장부터 긴 문장까지 오름차순 정렬해서 출력 해 주세요.

입력 예제

kfcmclo
zzzzz
abc
mincoding

출력 결과

abc
zzzzz
kfcmclo
mincoding
이니셜 뽑기
문제 7번
3차배열에 다음 값을 하드코딩 해주세요.(ABCD)
그리고 숫자 1개를 입력 받으세요.
숫자에 해당하는 배열값을 출력 해주세요.
예로들어 0을 입력했다면
와 같이 출력하면 됩니다.
(빈칸 : 띄어쓰기 한칸)

입력 예제

0

출력 결과

#
# #
###
# #
# #