Search

고급 알고리즘 복습 문제

문제 1번
한자리로 구성된 숫자들을 입력받고
Merge Sort를 한 후, 결과를 출력 해 주세요
숫자의 개수는 최대 20개 입니다
723185
125126
111222355678

입력 예제

723185125126

출력 결과

111222355678
문제 2번
퀵소트는 pivot을 자신의 최종 위치로 옮겨두고,
pivot 왼쪽에는 pivot보다 작은수를, pivot 오른쪽에는 pivot보다 큰수를 배치시킵니다.
이 작업을 arrange라고 하겠습니다.
이 작업을 재귀호출로 반복하면 quick sort가 됩니다.
정렬할 숫자 N개를 입력 받고,
처음 arragne를 수행 한 결과를 출력하고,
최종 정렬된 결과를 출력 해주세요.

입력 예제

6
3 5 4 2 6 1

출력 결과

2 1 3 4 6 5
1 2 3 4 5 6
문제 4번
8bit 숫자를 0으로 초기화 해 주세요. (char a = 0)
먼저 변경 할 총 n개의 숫자를 입력 받습니다.
그리고 n개 숫자 만큼 1로 변경할 위치를 입력합니다.
1로 set 한 결과를 10진수로 출력 하세요.
예를들어 아래와 같이 입력했다면, 0, 1, 2번 bit를 set 하면 됩니다.
[입력]
숫자의 총 개수 N을 입력 받습니다.
그리고 N개의 숫자를 입력 받습니다.
[출력]
변환이 된 숫자를 출력 해주세요.

입력 예제

3
0 1 2

출력 결과

7
문제 5번
건물 전등이 켜져있는지 꺼져있는지 확인할 수 있는 시스템을 만들려고 합니다.
N 개의 좌표를 입력받고, 좌표마다 불이 켜있는지 꺼있는지 확인해주세요.
숫자1은 불이 켜있는 상태, 숫자0은 불이 꺼있는 상태입니다.
0 2 를 입력받으면 [0][2] 좌표는 1 이므로 ON 을 출력하면 되고,
1 0 을 입력받으면 [1][0] 좌표는 0 이므로 OFF 를 출력하면 됩니다.
그런데, 이 임베디드 시스템의 메모리를 아끼고자, 비트연산을 이용한 프로그램을 제작하려고 합니다.
2차배열을 사용하지 않고, 아래와 같이 하드코딩하여 문제를 해결 해 주세요.
char state[7] = {0xF, 0x1, 0x2, 0x3, 0xE, 0D, 0x7};
[입력]
좌표의 개수 N 을 입력 받습니다.
다음 줄에, N 개의 좌표를 입력해주세요.
[출력]
입력된 좌표마다 불이 켜져있다면 "ON", 꺼져있다면 "OFF" 를 출력해주세요.

입력 예제

4
0 0
0 2
1 0
5 0

출력 결과

ON
ON
OFF
ON
문제 6번
0과 1로 칠해질 수 있는 5x5 사이즈의 스케치북이 있습니다.
비어있는 곳은 0, 색칠 되어있으면 1 입니다.
색칠 할 좌표의 갯수와 좌표들을 입력받고, 해당 좌표에 색칠 해 주시면 됩니다.
최적의 성능을 위해 2차배열을 사용하지 말고, 1차배열로 배열을 나타낸 뒤, 비트연산을 이용 해 주세요.
그리고 최종적으로 해당 배열의 상태를 10진수로 출력해주시면 됩니다.
[예시]
2 진수 : 00010 = 10 진수 2
2 진수 : 00001 = 10 진수 1
2 진수 : 01000 = 10 진수 8
2 진수 : 10000 = 10 진수16
2 진수 : 11001 = 10 진수 25
출력결과 : 2 1 8 16 25
[입력]
색칠 할 좌표의 개수 N을 입력 받아주세요.
그 후, N 개의 좌표들을 입력해주세요.
[출력]
해당 배열의 상태를 10진수로 출력해 주세요.

입력 예제

7
0 3
1 4
2 1
3 0
4 0
4 1
4 4

출력 결과

2 1 8 16 25
문제 7번
숫자 네 개를 입력받아 배열에 넣어주세요.
입력받은 각 숫자는 다른 칸을 가르키는 index 번호 입니다.
만약 1 3 2 0 을 입력받았다면 아래 그림과 같이 됩니다.
data[0]은 1번 index를, data[1]은 3번 index를, data[3]은 0번 index를 가르킵니다.
0 부터 가르키는 인덱스를 따라가면 0, 1, 3번이 반복 되는것을 알 수 있습니다.
[입력]
네 개의 숫자를 입력 하세요.
[출력]
0번에서 항상 시작할때, 반복되는 index를 출력 하세요.
[예시 1]
[예시 2]
[예시 3]
[예시 4]

입력 예제

1 3 2 0

출력 결과

0 1 3
문제 8번
비트연산은 덧셈 뺄셈 나눗셈 곱셈 같은 사칙연산 같이 컴퓨터에서 쓰이는 연산입니다.
메모리를 더 아낄 수 있고, 빠른 속도로 상태 확인이 가능하기 때문에
속도에 매우 민감한 프로그램을 만드는 곳에는 자주 쓰이곤 합니다.
〔 간단히 비트연산을 연습 해 보세요. 〕
먼저 문제 번호를 입력받으세요.
그 다음 문제의 답은 아래 코드를 수정해서 16진수로 출력하면 됩니다.
(주의 : 앞자리 0을 제거한 답안을 출력 해 주세요. 만약 0x05가 정답이라면 0x5로 적어주세요.)
#include <iostream> using namespace std; int main() { int x; cin >> x; if (x == 1) cout << "0xAA"; if (x == 2) cout << "0xBB"; if (x == 3) cout << "0xCC"; if (x == 4) cout << "0xDD"; if (x == 5) cout << "0xEE"; if (x == 6) cout << "0xFF"; return 0; }
Python
복사
C++
<문제1>
물결 기호 (~ : 틸트)는 반대를 뜻합니다.
8bit System에서 ~0xFA 값은?
<문제2>
And 기호 (& : 엠퍼센드)는 같은 자리 bit가 서로 1 일때만 연산 결과가 1 입니다.
int b = 0xEA & 0xF;
이때 b에 들어있는 값은?
<문제3>
Or 기호 ( | : Bar)는 같은 자리 bit에 1이 있다면 연산 결과는 1 입니다.
int c = 0xAAAA | 0x5555;
이때 c에 들어있는 값은?
<문제4>
Shift연산 <<와 >> 은 bit를 몇 번 밀어내는지를 나타냅니다.
int d = (0xA75B >> 8) << 4;
이때 d에 들어있는 값은?
<문제5>
XOR 기호 (^)는 OR과 비슷하지만, 두 bit가 모두 1일때는 0으로 돌아가는 연산입니다.
특정 bit를 반대로 바꿀 때 주로 쓰입니다.
int e = 0x77 ^ 0x4
이때 e에 들어있는 값은?
<문제6>
32bit인 int형은 0번 부터 31번 bit까지 존재합니다. 작은 숫자일수록 낮은 번호의 bit만 쓰입니다.
0xAEF5에서 하위 2번 ~ 4번 bit만 추출하려고 합니다.
a = (0xAEF5 >> 2) & 0x7;
이때 a에 들어있는 값은?

입력 예제

1

출력 결과

0x5
문제 9번
프로그래머로 Photoshop 회사에 취업한 민덕이는 포토샵 리터칭하는 기능을 담당하게 되었습니다.
신입 개발자로 맡은 첫번 째 기능은 마우스로 특정 좌표를 클릭했을 때,
그 좌표와 상하좌우 좌표의 색상 값들을 10% 줄어들게 하는 기능입니다.
아래와 같이 4 x 4 이미지 정보를 배열에 하드코딩 해 주세요
1
4
2
5
9
4
3
2
3
4
1
5
6
6
8
2
[입력]
좌표 N개를 입력받아주세요. (1 <= N <=5)
[출력]
해당좌표(y, x)와 상하좌우 좌표의 값을 10% 줄어들도록 정수형으로 계산 후 변환된 이미지 정보를 출력 해 주세요.
〔힌트〕 어떤 값을 10% 줄이는 방법은 어떤 값에 9/10를 곱하면 됩니다.
(ex) 숫자 7을 10%를 줄이는 방법
7*9/10 =   63/10   = 6

입력 예제

2
0 0
1 1

출력 결과

0 2 2 5
7 3 2 2
3 3 1 5
6 6 8 2
문제 10번
위의 맵배열을 하드코딩 한 후,
시작 위치와 도착지점을 입력 받으세요. (y, x)
최소 몇칸만에 갈 수 있는지 DFS를 돌려 답을 구해주세요.

입력 예제

0 0
3 3

출력 결과

6

문제 11번
지하에 갇힌 쥐돌이에게 가장 가까운 탈출구를 DFS를 사용하여 안내해주세요.
아래 지도(그래프)를 인접행렬로 하드코딩 해주세요.
같은 최소비용의 경로가 여러 개가 나올 수 있는 입력은 주어지지 않습니다.
[입력]
탈출구의 이름을 입력 하세요.
[출력]
쥐돌이의 위치에서 탈출구 까지의 최소 비용과 경로를 출력하세요.

입력 예제

E

출력 결과

7
ABCE
문제 12번 (Brute Force)
인도 학생들의 뛰어난 구구단 실력을 이기기 위해 프로그램을 제작했습니다.
이것은 숫자들을 확인하여 숫자가 몇단의 숫자인지 분석하는 프로그램입니다.
숫자 5개를 입력 받고 3개를 조합하여 숫자들을 만들어 주세요.
그 숫자들이 각각 몇 단에 해당하는지 확인하고 출력해주세요.
8을 분석하면 1,2,4,8 단에 들어 갈 수 있고 해당 단의 값에 추가 해주세요.
[입력]
숫자 5개를 입력 받으세요.
[출력]
1 부터 19 단까지 각 숫자들이 몇개가 존재 하는지 출력 해주세요.
1 단에 해당하는 숫자 개수가 60 개면 1 : 60 으로 출력하시면 됩니다.

입력 예제

1 2 3 4 5

출력 결과

1 : 60
2 : 24
3 : 24
4 : 12
5 : 12
6 : 8
7 : 6
8 : 5
9 : 12
10 : 0
11 : 8
12 : 4
13 : 5
14 : 2
15 : 4
16 : 3
17 : 2
18 : 4
19 : 4
문제 13번(Backtracking)
1000원 마트를 개업하는 최천원씨는 판매 상품 가격들을 정하려고 합니다.
주어지는 숫자를 조합하여 가격을 만들어야 하는데 몇 가지 조건이 있습니다.
[조건]
1.
1,000 ~ 9,900원 까지만 가격 생성이 가능합니다.
2.
100원 단위까지만 생성 가능합니다. ( 1과 10의 자리는 0이어야 합니다. )
3.
마케팅을 위해 백원 단위는 500 이상 900 이하 범위 가격만 사용합니다.
위 조건에 맞춰 주어진 숫자로 가격을 생성 해주세요.
[입력]
숫자의 개수 N 이 입력 된 후, 다음 줄에 숫자들이 입력 됩니다.
[출력]
조건에 따라 만들 수 있는 가격들의 총 개수를 출력 하세요.

입력 예제

5
7 2 1 0 0

출력 결과

2
문제 14번 (Backtracking)
어린이 수학 교실에서 사칙연산을 배우기 위해 퍼즐게임을 하고 있습니다.
사칙연산과 숫자가 붙어있는 퍼즐들을 조합하여 원하는 값이 나오도록 해주세요.
[규칙]
1.
퍼즐 사용 개수는 제한이 없지만 중복하여 사용할 수 없습니다.
2.
곱하기 퍼즐이나 나누기 퍼즐은 첫 번째에 사용할 수 업습니다.
3.
나누기 퍼즐은 나머지가 0 일때만 사용할 수 있습니다.
[입력]
퍼즐의 개수 N 이 입력되고, 원하는 결과 값이 입력 됩니다.
그 다음 줄에, 퍼즐들이 입력 됩니다.
퍼즐은 두자리 숫자이고, 10자리 숫자에 따라 연산이 다르게 적용됩니다.
1 : +(더하기) , 2 : -(빼기) , 3 : *(곱하기) , 4 : /(나누기) 입니다.
[출력]
원하는 결과 값을 만들 수 있는 경우의 수를 출력 해주세요.

입력 예제

4 0
11 21 12 42

출력 결과

3
문제 15번 (Backtracking)
1차원 배열에서 캐릭터가 좌우로 움직여 숫자를 만들 수 있는 게임을 하고 있습니다.
주어진 자릿수의 숫자 만들어 입력된 숫자보다 클 경우의 수를 구해주세요.
[규칙]
1.
1차원 배열의 어디서나 캐릭터는 출발할 수 있습니다.
2.
캐릭터는 좌우로 이동 가능 하고 가장 끝의 숫자는 처음 숫자와 연결되어 있습니다.
3.
중복된 숫자는 인정되지 않습니다.
4.
이동 했던 곳을 다시 이동할 수 있습니다.
[입력]
1차원 배열의 크기 N과 만들어야하는 숫자의 자리 수 M, 그리고 최소 값 V 를 입력하세요.
[출력]
만들어진 M 자리 수의 숫자중 V 보다 큰 숫자의 개수를 출력하세요.
[예시 1]
캐릭터가 인덱스 0에서 시작합니다.
캐릭터가 인덱스 0에서 왼쪽으로 이동합니다.
캐릭터가 인덱스 2에서 왼쪽으로 이동합니다.
2 > 3 > 1 의 칸을 밟았기 때문에 231 숫자가 생성되고 이 숫자는 입력된 230 보다 큽니다.

입력 예제

3 3 230
2 1 3

출력 결과

6
문제 16번 (DFS)
5 X 5 크기의 2차원 배열 마을이 주어집니다.
2차원 배열에는 각 지역의 높이가 입력 됩니다.
제우스는 마을에 피해를 적게 끼치고 싶어하지만 업무상 제일 높은 지역에 비를 내려야 합니다.
비를 내릴 지역 한곳을 정하고, 가장 적게 마을이 잠기는 수를 출력하세요.
비가 떨어진 지역의 높이보다 같거나 높은 곳으로 비구름이 옮겨가지 않습니다.
상, 하, 좌, 우로 비가 있는 지역보다 낮은 높이의 지역으로 비구름이 옮겨 갑니다.
[입력]
5 X 5 지역의 높이들이 입력 됩니다.
[출력]
잠기지 않는 마을의 최소 값을 출력하세요.
[예시1]
5 X 5 맵에서 가장 높은 3 지역들 중에 (3, 1) 에 비를 내립니다.
그럼 아래 그림처럼 비가 퍼질 수 있습니다.
[예시 2]
5 X 5 맵에서 가장 높은 3 지역들 중에 (4, 4) 에 비를 내립니다.
그럼 아래 그림처럼 비가 퍼질 수 있습니다.

입력 예제

1 3 1 2 3
3 1 1 2 3
1 1 3 3 1
2 3 1 1 3
2 2 3 3 3

출력 결과

24
문제 17번 (DFS)
//최대값 22로 수정 확인 필요
날씨의 신 제우스에게 제사를 지내는 마을이 있습니다.
이곳에 사는 사람들은 제사를 지내 비를 내리고, 농사가 잘 되게 하려고 합니다.
5 X 5 크기의 밭 높이의 2차원 배열 정보가 주어집니다.
총 세 곳에 비를 내릴 수 있고, 상, 하, 좌, 우로 퍼질 수 있습니다.
비는 비가 내린 지역이 높이와 같거나 낮은 지역에 퍼질 수 있습니다.
[입력]
5 X 5 크기의 2차원 배열이 입력 됩니다.
[출력]
가장 많은 곳에 비가 퍼질때, 비가 퍼진 지역의 총 수를 출력 하세요.
[예시 1]
(0, 1), (2, 3), (4, 1) 세 곳에 비를 내리면 다음과 같이 비가 퍼집니다.
비가 퍼지는 공간이 총 20으로 가장 크기 때문에 정답이 됩니다.

입력 예제

1 4 3 2 1
1 2 3 1 2
3 1 2 4 1
2 3 1 1 2
3 4 1 2 3

출력 결과

20
문제 18번 (DFS)
신들은 지배하기 위한 땅을 얻으려 싸움을 시작했습니다.
5 X 5 크기의 지역을 관리하던 제우스는 이 싸움을 끝내고 싶었습니다.
그래서, 적당한 장소에 비를 내려 붙어 있던 지역들을 갈라서 공평하게 나눌 수 있다고 생각했습니다.
홍수가 일어나 지역들이 피해를 입는것은 안타깝지만, 제우스를 도와 싸움을 멈춰주세요.
비는 현재 위치의 높이보다 작거나 같은 곳으로만 이동합니다.
또한 상, 하, 좌, 우로 인접한 곳으로만 이동됩니다.
상, 하, 좌, 우 네 방향으로 이어진 구역은 한 구역으로 인정됩니다.
[입력]
5 X 5 지역의 높이 정보가 입력됩니다.
[출력]
비를 내리고 상,하,좌,우로 연결되어 있는 지역들이 가장 많이 나눠져있을 때의 수를 출력하세요.
[예시 1]
(2, 4) 지역에 비를 내리면, 비에 의해 총 지역이 다섯 곳으로 나눠 질 수 있습니다.

입력 예제

1 3 1 1 4
1 3 1 3 1
2 1 1 1 2
1 2 1 2 3
1 1 1 2 1

출력 결과

5
문제 19번 (Brute Force)
에세이 첨삭 어플내의 채점 알고리즘을 개발했습니다.
이것은 주어진 알파벳들을 재조합하여 문법적 에러가 생기는 단어를 생성합니다.
만들어진 단어를 이용하여 에세이를 채점해야 합니다.
[규칙]
1.
모음 ( a, i, u, e, o ) 이 자음 개수보다 많아야 합니다.
2.
단어는 모두 대문자이어야 합니다.
[입력]
총 알파벳 개수와 만들 단어의 길이를 입력 받습니다.
[출력]
입력 받은 알파벳으로 단어를 생성하고, 사전식 오름차순 정렬 후 출력해주세요.

입력 예제

5 3
a B C d E

출력 결과

BCE
BEC
BEa
BaE
CBE
CEB
CEa
CaE
EBC
EBa
ECB
ECa
EaB
EaC
Ead
Eda
aBE
aCE
aEB
aEC
aEd
adE
dEa
daE
문제 20번
숫자카드 5개에 들어갈 숫자를 입력 받아주세요
이 숫자는 모두 다른 숫자 이어야 합니다.
이 중 3장의 카드를 뽑으려고 할 때
조합해서 나올 수 있는 max값과 min 값을 출력해주세요.
1.
ex) 1 9 4 8 2
MAX:984
MIN:124

입력 예제

5 3 7 6 4

출력 결과

MAX:765
MIN:345
문제 21번
문자 세개를 입력 받아 단어를 만들어 주세요. 중복되는 문자가 항상 존재합니다.
조합하여 생성한 단어 중, 중복되는 단어들은 한번만 출력 해주세요.
[입력]
문자 세개를 입력 받으세요.
[출력]
입력 받은 문자 순서대로 단어를 조합해주세요.
이미 출력된 단어가 생성되면, 그 단어를 제외하고 다음 단어를 만드세요.

입력 예제

A A B

출력 결과

AAB
ABA
BAA
문제 22번
8개 숫자를 입력 받으세요. 이 숫자를 압축하려고 합니다.
아래 예시들을 참고하여 압축한 결과를 출력 해주세요.
예를 들어,
0 0 0 0 0 0 0 0 을 입력 받았다면 모든 숫자가 0으로 되어있기 때문에 압축결과는 0 입니다.
만약,
1 1 1 1 0 0 0 0 을 입력 받았다면 모든 숫자가 같은숫자가 아니기에 절반으로 쪼갭니다.
만약,
1 1 1 1 0 0 1 1 인 경우
만약, 1 0 1 1 1 1 0 0 인 경우

입력 예제

1 1 1 1 0 0 1 1

출력 결과

(1(0 1))
문제 23번 (BFS)
n개항의 합이 10이되는 숫자들의 조합을 출력하려고 합니다.
(항 1개에 들어갈 수 있는 숫자는 2~5 입니다)
BFS를 돌려 Queue를 채우고 10이 나오는 조합의 개수를 출력해주세요.
합이 총 10이 나오는 조합의 수는 12가지 입니다.
1.
ex) 항 3개일때
2 + 3 + 5
2 + 4 + 4
2 + 5 + 3
...
5 + 3 + 2
------------
총 12가지
1.
ex) 항 2개일때
5 + 5
------
총 1가지

입력 예제

3

출력 결과

12
문제 24번(DP)
동전교환문제를 "다이나믹 알고리즘"으로 풀어주세요.
동전교환 할 금액을 입력 받고, 최소 동전교환수를 출력하세요.
동전의 종류: 10원, 20원, 50원 70원
*Dynamic 알고리즘이란
기존에 구했던 data를 이용하여 현재의 최적값을 구하는 방법론
값을 누적해 나가면서 최종값을 구해낸다.

입력 예제

100

출력 결과

2
문제 25번 (백트래킹)
동전교환 문제를 백트래킹 알고리즘 중 DFS로 풀어주세요.
동전수는 20원 30원 50원 이렇게 3개이며, 동전교환할 금액을 입력 받으세요.
그리고 최소 동전 교환수를 출력 하세요.
백트래킹
모든 경우를 시도해보는 방법입니다.
설계 할 때 트리를 그려보고, 가지치기할 전략을 세운 후 코딩을 시작해야 합니다.

입력 예제

60

출력 결과

2
문제 26번
Quick Sort를 구현해서 입력받은 값을 정렬 해주세요.
첫번째 입력 숫자는 정렬할 숫자의 개수 입니다.
1.
ex)
입력: 5
입력: 1 3 2 7 9
출력: 1 2 3 7 9
ex)
입력: 7
입력: 1 6 9 8 8 7 1
출력: 1 1 6 7 8 8 9

입력 예제

5
1 3 2 7 9

출력 결과

1 2 3 7 9
문제 27번
ABCDEFG 문장을 하드코딩 해주세요.
그리고 SWAP 할 범위를 n개 입력 받고 결과를 출력 해주세요.
만약 1~3 index 범위 SWAP 이라면
이렇게 뒤집으면 됩니다.
ex)
[입력]
3
1 3
2 5
0 2
[출력]

입력 예제

3
1 3
2 5
0 2

출력 결과

FDAEBCG
문제 28번
권투에서는 Left, Right 펀치를 사용합니다.
숫자 n을 입력 받으세요.
n회 펀치를 날릴 때 어떤 펀치들을 날릴 수 있는지 BFS를 이용하여 출력해주세요.
만약 3을 입력받았다면
LLL
LLR
LRL
LRR
RLL
RLR
RRL
RRR

입력 예제

2

출력 결과

LL
LR
RL
RR
문제 29번
좌표 4개를 입력 받으세요.
6x6 배열에서 입력된 좌표값에 1을 채워주세요.
그리고 1로 세팅된 곳을 모두 포함하는 최소 사각형의 사각 좌표와 끝좌표를 출력하세요.
ex)

입력 예제

1,1
2,3
4,2
3,2

출력 결과

1,1
4,3
문제 30번
아이스크림 전문점에서는 여덟가지 아이스크림이 있습니다.
손님이 n개의 아이스크림을 원할때,
총 몇 가지 조합이 가능한지 출력하세요.
(비트연산자와 마스킹을 이용하여 풀어주세요)

입력 예제

3

출력 결과

56
문제 31번
한자리 덧셈, 뺄셈, 그리고 괄호가 있는 수식(문장)을 입력 받습니다.
이 수식이 정상적인 수학수식인지 검사 해주세요.
만약 정상적이면 pass, 그렇지 않으면 fail을 출력 해주세요.
ex)

입력 예제

1+1+(4-3)+2-3

출력 결과

pass
문제 32번
5x5 판에 좌표를 입력 받고, 그 좌표를 기준으로 과녁판을 만드려고 합니다.
만약 2,2를 입력 받았다면
이렇게 과녁판이 만들어지고
만약 1,1을 입력 받았다면
이와같이 만들어집니다.
(빈공간은 0입니다)
이제 과녁판에 총을 쏘았을때 얻을 수 있는 점수의 합을 출력하세요.
총을 쏜 횟수와 좌표는 입력으로 주어집니다.
ex)
[입력]
2 2     //과녁판 생성 기준 좌표
5        //총을 쏜 횟수
1 1       //총을 쏜 좌표1
2 2     //좌표2
2 3     //좌표3
2 3     //좌표4
3 1     //좌표5
[결과]
=>       3+1+2+2+3  = 11

입력 예제

2 2
5
1 1
2 2
2 3
2 3
3 1

출력 결과

11
문제 33번
자음과 모음을 조합해서 n글자의 이름을 만들려고 합니다.
만약 2를 입력 받으면,
2개의 글자를 만들기 위해 자음2개, 모음2개가 필요합니다.
BFS를 돌려 만들 수 있는 모든 이름을 출력 해주세요.
ex)
[입력]
2
[출력]
BaBa
BaBo
BaBu
BaTa
. . .
SuSu

입력 예제

2

출력 결과

BaBa
BaBo
BaBu
BaTa
문제 34번
정렬이 되어있는 data가 있습니다.
숫자 1개를 입력 받고, 몇번째 index에 존재하는지 출력 하세요.
Binary Search 알고리즘으로 코딩해주세요.
ex)
입력: 3
출력: 2번 index
ex)
입력: 13
출력: 6번 index

입력 예제

3

출력 결과

2번 index
문제 35번
A / B / C 보석을 다량 보유하고 있습니다.
이 보석들을 최대한 챙겨서 한국으로 가져가려고 합니다.
하지만 세관에 통과할 수 있는 가방의 한계 KG은 정해 져 있습니다.
허용가능한 가방의 최대 무게를 입력 받고,
벌수있는 최대 금액을 출력 해 주세요
예로들어 6KG 가방이 있다면
최대로 벌 수 있는 금액은 10만원 입니다.

입력 예제

6

출력 결과

10
문제 36번
위와 같은 학습 tree가 있습니다.
DFS를 돌려 한 과목당 한번씩만 수업을 들으려고 합니다.
DFS의 순서대로 과목을 듣는 순서를 출력 하세요.
(입력값은 없습니다)

출력 결과

basic
adv
hard
java
c#
문제 37번
다음의 트리를 1차원 배열로 하드코딩 한 후 DFS를 돌려주세요.
[Hint] : void DFS(int level, int nowIndex)

출력 결과

ABD
ABE
ACF
문제 38번
위 그림과 같이 네비게이션을 만드려고 합니다.
시작 위치와 도착 위치를 입력 받았을 때 최소시간을 출력 해주세요.
(DFS를 사용해서 풀어주세요)

입력 예제

N G

출력 결과

70
문제 39번
다섯명의 친구중 n명 이상 (>=n)의 친구들과 여행을 가려고 합니다.
같이 갈 수 있는 친구의 조합을 모두 Counting해서 출력 해 주세요.
(힌트 : 이진트리로 생각 해 보시면 됩니다)
1.
ex) 3
ABCDE
ABCD
ABCE
ABC
ABDE
ABD
...
CDE
------
16

입력 예제

3

출력 결과

16
문제 40번
대글자로 된 두 문장의 유사도를 판단하려고 합니다. (최대 10글자)
두 문장을 입력, 아래 계산방법에 따라 유사도를 출력 해 주세요
1.
ex) EFEAEA // EFAEQ
연결된 두 글자로 단어를 만들면 아래와 같습니다.
EF FE EA AE EA // EF FA AE EQ
교집합인 단어들은 총 2개 (EF, AE)
합집합인 단어들은 총 6개 (EF FE EA AE FA EQ)
2 / 6 x 100 = 33
(소수점 아래는 버립니다)
정답은 33 입니다.
HASH를 이용해서 풀어주세요

입력 예제

EFEAEA
EFAEQ

출력 결과

33
문제 41번
1차배열에 이진트리를 입력 받습니다.  (최대 16글자)
만약, AGKTP__O를 입력 받으면
왼쪽과 같은 tree가 됩니다.
트리를 입력받고 DFS를 돌렸을때 탐색되는 알파벳 순서대로 출력 해주세요.

입력 예제

AGKTP__O

출력 결과

AGTOPK
문제 42번
n을 입력받고, n개만큼 링크드리스트를 만들어주세요.
값으로는 알파벳 A부터 순차적으로 넣습니다.
그 다음 n/2번째 노드를 제거 해주세요.
그리고 링크드리스트 값을 출력 해주세요.

입력 예제

5

출력 결과

ABDE
문제 43번
1차원 배열에 아래 트리를 하드코딩을 해주세요.
DFS를 돌려 두번 이상 발견되는 알파벳을 출력 해주세요.(입력값 없음)
[출력]
BC
두번째 B가 먼저 발견되고, 그 후 두번째 C가 발견됩니다.

출력 결과

BC
문제 44번
위 그림을 보면 0~8번 사람들이 있습니다.
0~8번 사람들 각각 반장 후보를 뽑기위해 후보의 이니셜을 적어 투표했습니다.(하드코딩)
예로 들어 위의 그림을 보면
B는 0, 1, 5, 7번 사람이 뽑았고,
C는 2, 6, 8번이 뽑은 걸 알 수 있습니다.
각 후보마다 투표한 사람들을 알아내고자 합니다.
위와 같이 알파벳 순서대로 출력 해주세요.

입력 예제

BBCTABCBC

출력 결과

A-4
B-0157
C-268
T-3
문제 45번
16진수 두자리수를 입력 받고, 2진수로 변환 했을때 1의 총 개수를 출력하세요.
scanf로 16진수 숫자 입력 받는 방법
int input;
scanf("%x", &input);
______________________________________________________________________
ex)
61   -> 01100001(2)   ->   총 3개
ex)
27   -> 00100111(2)   ->          총 4개
힌트
5번 bit가 숫자 0인지 확인하는 방법
d = 0x53;
result = ( d & (0x1 << 5) )
if (result > 0)
{
printf("5번 bit는 숫자 1 입니다");
}

입력 예제

61

출력 결과

3
문제 46번
쥐가 사과를 몇번만에 먹을 수 있는지 DFS로 구해주세요.
입력값에서 @는 쥐의 위치이고, #은 사과의 위치 입니다.
힌트: 사과를 찾았을때 return을 하면서 counting하면 최단거리 수가 나옵니다.
[입력]
@ 1 0 #
0 1 0 1
0 1 0 1
0 0 0 1
[출력]
9회

입력 예제

@ 1 0 #
0 1 0 1
0 1 0 1
0 0 0 1

출력 결과

9회
문제 47번

입력 예제

1 2 3 5 4 1

출력 결과

최대 = 4
문제 48번

입력 예제

0 1 1 1 0
1 0 1 1 1
1 1 0 0 0
1 1 0 0 1
0 1 0 1 0

출력 결과

ABDE
ABE
ACBDE
ACBE
ADBE
ADE
문제 49번
'_'문자로 이루어진 한 문장을 입력 받습니다.
'_' 노드없음을 나타내고 문자는 노드를 나타냅니다.
예로들어 ABHCDE_F인 경우는
왼쪽과 같이 트리로 나타냅니다.
이렇게 구성된 트리에서 DFS 탐색을 하여
마지막 노드에 도착했을때, 진입한 경로를 출력 하는 프로그램을 짜주세요.

입력 예제

ABHCDE_F

출력 결과

ABCF
ABD
AHE
문제 50번
한문장을 입력 받으세요.(최대 10글자)
아래 예제는 0~7번 사람들이 살고 있는 마을을 적어두었습니다.
가장 인기가 좋은 마을을 선정하여 그 마을에 살고 있는 사람들 번호를 출력 하세요.
(chaining을 이용 해주세요)
ex)

입력 예제

BBBCDEFB

출력 결과

B : 0 1 2 7
문제 51번
링크드리스트로 아래와 같이 노드를 만들어주세요.
링크드리스트를 DFS로 돌리고, 탐색순서를 출력 해주세요.(입력값 없음)

출력 결과

1267543
문제 52번
아래와 같은 숫자 노드 그래프를 인접 행렬로 하드 코딩해주세요.
그리고 입력받은 노드부터 BFS를 이용하여 노드의 값을 출력해주세요.
BFS 알고리즘을 사용하여 탐색했을때, 작은 숫자의 노드부터 탐색하기 때문에
출발지가 3인 예제의 답은 3 1 6 8 4 2 9 7 입니다.
[입력]
출발지를 입력 받으세요.
[출력]
BFS 로 탐색하면서 순서대로 노드 값을 출력하세요.

입력 예제

3

출력 결과

3 1 6 8 4 2 9 7
문제 53번
루팡은 부자집에 들어가서 금고를 털려고 합니다.
각 노드들은 부자들의 집들이며 노드에 써있는 값은 금고에 있는 금액입니다.
루팡이 한번 턴 집은 경찰이 배치되므로, 다시 가면 안됩니다.
루팡이 출발지에서 출발해서, 다시 집으로 도착했을 때 최대로 모을 수 있는 금액을 출력 하세요.

출력 결과

275