sort를 사용하기 전에 람다식을 알게되면 sort를 편하게 사용할 수 있는 경우가 많다.
C++에서 람다식(lambda expression)은 익명 함수(anonymous function)를 정의하는 방법으로, 짧고 간결하게 함수 객체를 생성할 수 있습니다. 람다식은 일반적으로 코드 블록을 함수 인라인으로 정의할 때 사용됩니다. C++11부터 도입되었으며, 이후의 C++ 표준에서도 지속적으로 개선되고 있습니다.
람다식의 기본 구조는 다음과 같습니다:
[capture](parameters) -> return_type {
// 함수 본문
}
C++
복사
구성 요소
1.
캡처 리스트 (Capture list): 람다식이 정의된 범위 내의 변수를 캡처하여 람다식 내부에서 사용할 수 있게 합니다. [] 안에 캡처할 변수들을 명시합니다.
•
[=] : 외부 변수들을 값으로 캡처 (복사).
•
[&] : 외부 변수들을 참조로 캡처.
•
[x, &y] : x는 값으로, y는 참조로 캡처.
2.
매개변수 리스트 (Parameters list): 함수와 마찬가지로 람다식이 받을 매개변수를 정의합니다.
3.
반환 타입 (Return type): 반환 타입을 명시적으로 지정할 수 있으며, > 기호를 사용합니다. C++14부터는 반환 타입을 생략할 수 있습니다. 컴파일러가 자동으로 추론합니다.
4.
함수 본문 (Function body): 람다식의 실제 코드가 들어가는 부분입니다.
예제
1.
간단한 람다식 예제:
auto add = [](int a, int b) -> int {
return a + b;
};
int result = add(3, 4); // result는 7
C++
복사
1.
외부 변수 캡처:
int x = 10;
int y = 20;
auto addXY = [x, &y](int a) {
return a + x + y;
};
int result = addXY(5); // result는 35, x는 10, y는 20
C++
복사
1.
캡처 리스트 예제:
int a = 1, b = 1;
auto fib = [=]() mutable {
int temp = a;
a = b;
b = temp + b;
return temp;
};
for (int i = 0; i < 5; ++i) {
std::cout << fib() << " "; // 1 1 2 3 5
}
C++
복사
1.
람다식을 인자로 전달:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::for_each(vec.begin(), vec.end(), [](int &n) { n *= 2; });
for (int n : vec) {
std::cout << n << " "; // 2 4 6 8 10
}
return 0;
}
C++
복사
람다식은 함수 객체와 비교해 간결하고 가독성이 좋으며, 코드 작성 및 유지보수를 용이하게 해줍니다. C++11부터 시작하여 C++14, C++17, C++20 표준까지 지속적으로 기능이 확장되어 더욱 유용하게 사용될 수 있습니다.
algorithm 헤더를 사용해서 sort 정렬 함수를 사용 할 수 있다.
#include <algorithm>
C++
복사
std::sort 함수 원형
template<class RandomIt>
void sort(RandomIt first, RandomIt last);
template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);
C++
복사
•
first: 정렬을 시작할 범위의 첫 번째 요소를 가리키는 반복자
•
last: 정렬을 종료할 범위의 마지막 다음 요소를 가리키는 반복자
•
comp: (optional) 정렬 기준을 제공하는 함수나 함수 객체로 람다식으로 표현될 수 있다
만약 비교함수 comp가 사용자에 의해 제공되지 않은 경우 기본적으로 < 연산자를 사용하여 비교를 수행하며, 이를 통해 오름차순으로 정렬한다.
비교함수 멤버함수 사용
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;
struct Info {
int val;
bool operator < (const Info& i) const {
return val > i.val; // val이 큰 원소가 앞에 오도록 정렬
}
};
int main() {
fastio;
vector<Info> v;
for (int i = 1; i <= 5; i++) v.push_back(Info{ i });
sort(v.begin(), v.end());
for (auto& i : v) cout << i.val << ' '; cout << '\n'; // 5 4 3 2 1
}
JavaScript
복사
비교함수 전역함수 사용
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;
bool Cmp(const string& a, const string& b)
{
if (a.size() != b.size()) return a.size() < b.size(); // size가 작은 원소가 앞에 오도록 정렬
return a > b; // size가 같은 경우엔 사전 순으로 더 뒤에 있는 원소가 앞에 오도록 정렬
}
int main()
{
fastio;
vector<string> v{ "stack", "queue", "list", "set", "map" };
sort(v.begin(), v.end(), Cmp);
for (auto& i : v) cout << i << ' '; cout << '\n'; // set map list stack queue
}
JavaScript
복사
비교함수 작성(람다식 사용)
auto compare = [](int a, int b) { return a < b; }
C++
복사
두 요소를 받아들여 비교한 결과를 반환하여 정렬의 순서를 결정하는 비교함수를 작성한다. 비교 함수의 반환값이 양수인 경우 sort함수는 두 요소의 순서를 바꾼다. 위와 같이 람다식을 사용해 인수로 넘겨줄 비교함수를 작성할 수 있다.
보통 정수형 벡터의 경우 오름차순으로 정렬할 때는 return a < b; 내림차순으로 정렬할 때는 return a > b;로 정의하는데 여기서 의문이 생긴다.
a < b가 참일 때 두 요소의 순서가 바뀐다면 큰 수가 앞에 오게되니까 내림차순 정렬되는게 아닌가?
그런데 실제로는 그렇지 않다. 이는 a에 뒷 요소가 들어오기 때문이며 출력을 해보면 이사실을 알 수 있다.
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> numbers = {5, 4, 3, 2, 1};
sort(numbers.begin(), numbers.end(),
[](int a, int b)
{
printf("a: %d, b: %d\n", a, b);
return a < b;
});
cout << "Sorted numbers in ascending order: ";
for (const auto& num : numbers)
{
cout << num << " ";
}
cout << endl;
return 0;
}
C++
복사
정수형 벡터 오름차순 정렬 예시
#include <iostream>
#include <vector>#include <algorithm>
using namespace std;
int main()
{
vector<int> numbers = {5, 2, 8, 1, 7, 3};
sort(numbers.begin(), numbers.end());
cout << "Sorted numbers in ascending order: ";
for (const auto& num : numbers)
{
cout << num << " ";
}
cout << endl;
return 0;
}
C++
복사
람다식으로 비교함수를 정의하여 정수 내림차순 정렬 예시
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> numbers = {5, 2, 8, 1, 7, 3};
sort(numbers.begin(), numbers.end(),
[](int a, int b)
{
return a > b;
});
cout << "Sorted numbers in descending order: ";
for (const auto& num : numbers) {
cout << num << " ";
}
cout << endl;
return 0;
}
C++
복사
람다식 비교함수에서 외부 변수를 캡쳐하여 구조체를 정렬하는 예시
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Person
{
std::string name;
int age;
};
int main()
{
vector<Person> people = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 22}, {"David", 28}};
sort(people.begin(), people.end(),
[&](const Person& a, const Person& b)
{
return a.age < b.age;
});
cout << "Sorted people with age:" << endl;
for (const auto& person : people) {
cout << person.name << " (" << person.age << ") " << endl;
}
return 0;
}
C++
복사
원본 배열을 직접 변경하지 않고 원본 배열의 요소들이 정렬될 순서를 담은 인덱스 배열을 확보하는 예시
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric> // iota 함수를 위해 필요
using namespace std;
int main()
{
vector<int> numbers = {5, 2, 8, 1, 7, 3};
vector<int> indices(numbers.size());
// 인덱스 초기화
iota(indices.begin(), indices.end(), 0);
// 인덱스 벡터를 원본 배열의 값에 따라 정렬
sort(indices.begin(), indices.end(),
[&numbers](int i1, int i2)
{
return numbers[i1] < numbers[i2];
});
cout << "Sorted indices based on the values in the original array: ";
for (int i : indices)
{
cout << i << " ";
}
cout << endl;
cout << "Original array sorted based on the sorted indices: ";
for (int i : indices)
{
cout << numbers[i] << " ";
}
cout << endl;
return 0;
}
C++
복사
그 외적으로 여러가지 stl에서 제공되는 알고리즘 함수들
다양한 STL 알고리즘 함수
예약어 | 설명 |
for_each | 모든 요소를 지정한 함수로 조작 |
find | 요소 검색 |
find_if | 지정한 조건을 만족하는 요소 검색 |
min_element | 최소 요소 리턴 |
max_element | 최대 요소 리턴 |
sort | 요소 정렬 |
count | 지정한 숫자와 일치하는 요소 수 리턴 |
count_if | 지정한 조건을 만족하는 요소 수 리턴 |
all_of | 모든 요소가 지정한 조건을 만족하면 true 리턴 |
none_of | 모든 요소가 지정한 조건을 만족하지 않으면 true 리턴 |
any_of | 모든 요소 중에 어느 하나라도 지정한 조건을 만족하면 true 리턴 |
fill | 모든 요소에 지정한 값을 대입 |
copy | 모든 요소를 복사 |
copy_if | 지정한 조건을 만족하는 요소만 복사 |
generate | 모든 요소에 지정한 연산 결과를 대입 |
transform | 모든 요소를 지정한 함수로 변환 |
remove | 지정한 숫자에 일치하는 요소를 제거 |
remove_if | 지정한 조건을 만족하는 요소를 제거 |
replace | 지정한 숫자를 지정한 숫자로 변경 |
replace_if | 지정한 조건에 만족하는 요소를 지정한 숫자로 변경 |
random_shuffle | 모든 요소를 셔플 |
accumulate | 모든 요소의 집계 계산 |
숙제
문제 1번
숫자와 문자가 한 쌍인 n개 Set을 구조체배열에 입력받으세요. (1 <= n <= 100)
우선순위에 맞춰 삽입정렬로 정렬 후 출력하면 됩니다.
[우선순위]
1.
작은 숫자가 더 앞에 있어야 하며 (오름차순)
2.
같은 숫자인 경우, 더 작은 문자가 앞에 배치되어야 합니다.
정렬 전
4 T | 4 F | 5 E | 5 F | 4 A | 1 C |
정렬 후
1 C | 4 A | 4 F | 4 T | 5 E | 5 F |
입력 예제
6
4 T
4 F
5 E
5 F
5 A
1 C
출력 결과
1 C
4 F
4 T
5 A
5 E
5 F
문제 2번
사격 대회에서 N명의 선수가 점수를 냈습니다. (최대 1,000명)
선수들의 정보를 입력받고 금,은,동메달 선수의 기록만을 출력하고자 합니다.
그런데 사격대회 컴퓨터는 보안 문제로 인해, 네 칸의 배열만을 사용할 수 있습니다.
배열 네 칸만을 사용해서 금, 은, 동메달의 점수를 출력해주세요.
(삽입정렬로 풀어주세요.)
입력 예제
6
35
69
73
83
95
99
출력 결과
금99
은95
동83
문제 3번
숫자 폭탄의 개수 N을 입력 받고, N개의 폭탄을 입력 받습니다.
이 폭탄을 일렬로 쌓아 주세요.
그러다 같은 숫자 폭탄이 3개가 연속으로 쌓인다면, 한꺼번에 터집니다.
폭탄이 모두 쌓이고 난 뒤에, 남아 있는 숫자폭탄들을
오름차순으로 정렬해 주세요.
만약 17개의 폭탄을 아래와 같이 입력받았다면,
5 4 5 1 1 1 1 1 2 2 2 3 3 3 3 8 1
남은 폭탄은 5 4 5 1 1 3 8 1 입니다.
이제 정렬 후 출력하면 됩니다.
출력결과 : 1 1 1 3 4 5 5 8
입력 예제
17
5 4 5 1 1 1 1 1 2 2 2 3 3 3 3 8 1
출력 결과
1 1 1 3 4 5 5 8
문제 4번
창고에 여러 종류의 음료를 보관 하다보면, 음료수들이 섞이기 마련입니다.
쌓아둔 음료수들을 보기 좋게 정렬하려고 합니다.
음료수를 쌓을 수 있는 Line은 총 5개 입니다.
정렬이 필요한 Line의 숫자를 입력 받고, 그 Line에 해당하는 음료수들만 정렬 해야 합니다. (오름차순 정렬)
정렬 할 Line은 2개입니다.
만약 0 3을 입력받는다면, 0번과 3번 Line을 각각 정렬하면 됩니다.
[입력]
각 줄마다 0 ~ 5번 Line에 들어갈 음료수 번호들을 입력 받으세요.
음료수 번호는 0 ~ 9 사이입니다.
마지막 줄에는 정렬을 할 두 Line을 입력 받으면 됩니다.
[출력]
두 Line의 정렬작업을 끝내고,
각 Line별 가장 아래에 있는 음료수들을 출력하면 됩니다.
위 예제에서 가장 아래에 있는 음료수의 번호는 0 5 0 2 4 입니다.
입력 예제
160
57
0322
92
48
0 3
출력 결과
0 5 0 2 4
문제 5번
연락처 앱에 정렬 기능을 만드려고 합니다.
문자열 개수 N을 입력 받고, N명의 이름을 입력받아주세요.
그리고 아래와 같은 조건으로 정렬 후 출력해 주세요.
[정렬 우선순위]
1.
길이 순으로 정렬 (오름차순)
2.
사전 순으로 정렬 (오름차순)
[예시 : 정렬 전 순서]
[정렬 후 순서]
입력 예제
5
aaleh
amily
acome
john
java
출력 결과
java
john
aaleh
acome
amily
문제 6번
어느 국가에서, 실명제 국회의원 투표가 시작되었습니다.
여러 사람들이 N명의 국회의원들에게 투표를 합니다. (1 <= N <= 100)
가장 투표를 많이 받은 국회의원을 찾아주세요.
(같은 표를 받았다면, 번호가 더 빠른 사람이 당선됩니다.)
국회의원들은 숫자로 나타내고, 사람들은 투표할 숫자와 이름으로 입력됩니다.
당선된 국회의원이 누구에게 투표를 받았는지를 출력해주세요.
[예시]
5 12 //5명, 12명의 시민
0 sam
1 sammy
3 sole
2 coo
0 luke
1 haily
2 elly
3 hoo
2 kim
2 joon
4 john
4 loo
결과 : coo elly kim joon
입력 예제
5 12
0 sam
1 sammy
3 sole
2 coo
0 luke
1 haily
2 elly
3 hoo
2 kim
2 joon
4 john
4 loo
출력 결과
coo elly kim joon
문제 7번
3 x 3 사이즈의 분당의 밭에 농작물이 자라고 있습니다.
아래 이미지는 네 좌표에 7개의 작물들이 심어져 있는 그림입니다.
(0, 0) 좌표에는 밑에서 부터 8, 5, 2의 내구도를 갖는 작물이 심어져 있습니다.
어느날 갑자기 강풍이 불어 농작물들이 피해를 입었습니다.
강풍이 한번 불면, 가장 위에 있는 작물만, 강풍의 세기만큼 내구도가 깎입니다.
만약 강풍의 세기가 가장 위에 있는 작물의 내구도보다 더 크다면, 작물은 사라집니다.
강풍이 K번 불고난 뒤, 남은 농작물의 총 개수를 출력하세요.
[입력]
먼저 입력 좌표의 수(N)를 입력 받고, 그 다음줄부터 좌표당 작물정보가 입력됩니다.
이제 N개의 작물 정보가 입력됩니다. (좌표y, 좌표x, 작물의 내구도들)
작물 정보가 입력 된 후에는 강풍이 부는 횟수 (K)를 입력 받습니다.
이제 K번의 각 강풍의 세기를 입력 받습니다.
[예시]
4 // 입력 좌표 수
0 0 852
0 2 51
1 1 5
2 0 3
2 // 강풍 횟수
4 2
총 3개의 작물이 남았으므로, 출력결과는 3 입니다.
입력 예제
4
0 0 852
0 2 51
1 1 5
2 0 3
2
4 2
출력 결과
3
문제 8번
회원관리 시스템을 새로 구축 하였습니다.
새로운 시스템의 회원 아이디 규칙은 다음과 같습니다.
1.
모두 대문자
2.
첫 글자 대문자, 나머지 소문자
그런데 규칙에 어긋난 회원 아이디가 있어서 곤란한 상황입니다.
변경 규칙에 따라, 회원들의 아이디를 변경 해 주세요.
변경이 끝난 뒤, 사전 순 오름차순으로 정렬 후 출력하면 됩니다.
[변경 규칙]
첫 글자 대문자이고, 나머지 소문자 --> 변경하지 않습니다.
소문자로만 이루어진 회원들 --> 첫 글자 대문자, 나머지 소문자로 아이디로 변경합니다.
그 밖에 대소문자가 섞여있는 회원들 --> 모두 대문자로 아이디를 변경합니다.
입력 예제
5
redeye
apple
Steve
Berry
eUnBo
출력 결과
Apple
Berry
EUNBO
Redeye
Steve
문제 9번
알파벳이 적혀있는 카드들이 있습니다.
N장의 카드를 선정하고, 이중 가장 빈도수가 높은 알파벳 카드를 뽑으려고 합니다.
이 카드들 중 가장 사전순으로 가장 뒤에 있는 N 장의 카드를 선택합니다.
만약 A B Z Z A Y Y Y A T 로 총 10장의 알파벳 카드가 있다고 가정합니다.
여기서 사전순으로 가장 뒤에 있는 6 장의 카드를 선택한다면, "Z Z Y Y Y T" 를 선택할 수 있습니다.
선택된 카드 중, 가장 많이 등장하는 알파벳을 출력 해 주세요. (빈도수가 가장 높은 문자 선택)
위 예제에서는 Y 가 가장 많으므로, 출력결과는 Y 입니다.
(만약 빈도수가 같은 알파벳이 2개 이상이라면, 사전순으로 가장 앞에있는 문자를 선택합니다.)
입력 예제
ZZAYYYKBTA
6
출력 결과
Y
문제 10번
복권 번호를 추천해주는 프로그램을 제작해야 합니다.
n을 입력받고, n x n 번호판과, n x n 비트배열을 입력받으세요. ( 1 <= n <= 10 )
비트배열 값이 '1' 인 좌표에 해당하는 번호판 숫자를 추출합니다.
만약 번호판이 아래와 같이 입력을 받고,
3 4 1 6
7 7 2 4
2 6 4 5
4 2 6 5
만약 비트배열이 아래와 같이 입력을 받는다면,
0 1 0 0
0 1 0 0
0 0 1 0
0 1 0 0
추출된 숫자는 4 7 4 2 입니다.
추출된 숫자를 아래 조건에 맞게 정렬 하면 됩니다.
추출 및 정렬이 완료된 숫자 Set를 알려주는 프로그램을 제작 해 주세요.
[정렬 우선 순위]
1.
빈도수가 높을 수록, 우선순위가 높다.
2.
숫자가 작을수록, 우선순위가 높다.
[예시]
4 // 사이즈는 4 x 4
3 4 1 6 //번호판
7 7 2 4
2 6 4 5
4 2 6 5
0 1 0 0 // 비트배열
0 1 0 0
0 0 1 0
0 1 0 0
추출된 숫자는 4 7 4 2 이며,
4가 2개 존재하여, 우선순위는 4가 가장 높습니다.
출력 결과 : 4 4 2 7
[세부사항]
1.
번호판, 비트배열의 크기는 항상 동일합니다.
2.
1 <= n <= 10
3.
번호판에 써있는 숫자의 범위는 0 ~ 9 숫자입니다.
입력 예제
4
3 4 1 6
7 7 2 4
2 6 4 5
4 2 6 5
0 1 0 0
0 1 0 0
0 0 1 0
0 1 0 0
출력 결과
4 4 2 7
문제 1번
네 글자로 된 대문자만을 검색해주는 검색엔진을 구현해야 합니다.
먼저 아래 6개의 단어들을 하드코딩(초기화) 해 주세요.
ABCD
ABCE
AGEH
EIEI
FEQE
ABAD
네 글자로 된 검색어를 입력받습니다.
만약 A??? 을 입력 받으면, A로 시작하는 네 글자를 검색을 해 주며,
만약 ?C?B 을 입력 받으면, 두 번째 글자는 C, 네 번째 글자는 B인 단어를 검색 해 줍니다.
6개의 단어 중, 몇 개의 단어가 검색되는지 개수를 출력하세요.
입력 예제
?B??
출력 결과
3
문제 2번
한 문자열을 입력받아주세요. (최대 10글자)
그리고 알파벳을 1씩 감소시키면서 출력하면 됩니다.
알파벳이 A보다 작아지면 사라지게 됩니다.
아래 규칙대로 모든 문자열이 사라질때까지 될때까지 출력 해 주세요.
1.
ex) ACEDAF 입력시
ACEDAF
_BDC_E
_ACB_D
__BA_C
__A__B
_____A
______
입력 예제
CGDE
출력 결과
CGDE
BFCD
AEBC
_DAB
_C_A
_B__
_A__
____
문제 3번
A ~ S 까지 이름이 적혀있는 붕어빵 상태를 3 x 6 배열에 하드코딩 합니다.
알파벳을 입력받으면, 자기 자신과 위, 아래, 왼쪽, 오른쪽 붕어빵들이 뒤집히면서 # 으로 표시됩니다.
한번 뒤집힌 곳을 한번 더 뒤집으면 다시 알파벳으로 원상복구가 됩니다.
한 문자열을 입력받고, 문자열 순서대로 붕어빵을 뒤집고, 최종 결과를 출력 해 주세요.
[예시]
BE를 입력 받았다고 가정합니다.
만약 B를 뒤집으면 아래와 같이 됩니다.
# | # | # | E | F | G |
H | # | J | K | L | M |
N | O | P | Q | R | S |
다시 이 상태에서 만약 E를 뒤집으면, 아래와 같이 붕어빵 C가 다시 나타납니다.
# | # | C | # | # | G |
H | # | J | # | L | M |
N | O | P | Q | R | S |
입력 예제
BE
출력 결과
##C##G
H#J#LM
NOPQRS
문제 4번
유한상사의 직원들은 회식자리에서 소주 병뚜껑 안쪽에 적혀있는 번호 맞추기 게임을 합니다.
희철이는 유한상사 직원들이 했던 게임 데이터를 이용하여, 정답을 찾는데 도움을 주는 프로그램을 제작하려고 합니다.
[게임 방법]
병뚜껑에는 1 ~ 50 중 하나의 숫자가 적혀있습니다.
게임 Host는 먼저 병뚜껑 안쪽의 숫자를 확인합니다.
병뚜껑에 적혀있는 숫자는 47이라고 가정하겠습니다.
그리고 누군가 30을 외쳤다면, Host는 "UP" 이라고 대답합니다. (30 < 47)
이제 사람들은 병뚜껑에 써 있는 숫자가 31 ~ 50 사이에 있다는 것을 인지합니다.
다시 누군가 48을 외쳤다면, Host는 "DOWN" 이라고 대답합니다.
이제 사람들은 병뚜껑에 써 있는 숫자가 31 ~ 47 사이에 있다는 것을 인지합니다.
다시 누군가 41을 외쳤다면, Host는 "UP" 이라고 대답합니다.
이제 사람들은 병뚜껑에 써있는 숫자가 42 ~ 47 사이에 있다는 것을 인지합니다.
[희철이의 게임 분석 프로그램]
희철이는 유한상사 직원들이 게임을 했던 Log Data를 수집하였습니다.
Log Data를 분석하고, 정답이 될 수 있는 범위를 찾아 출력 해 주세요.
만약 논리적인 오류가 있는 이력이 발견되면 "ERROR" 라고 출력하세요.
만약 정답이 1 개로 좁혀졌다면 정답의 숫자만 출력 해 주세요.
[예시 1]
5 명이 게임을 한 Log Data를 다음과 같이 수집했습니다.
15 DOWN
14 DOWN
3 UP
6 UP
10 UP
병뚜껑은 10 ~ 14 사이에 있는 숫자 이므로, 출력결과는 10 ~ 14
[예시2]
3
10 UP
35 DOWN
7 DOWN
데이터에 논리적인 오류가 있기 때문에 출력결과는 ERROR
[예시3]
4
20 UP
23 DOWN
21 UP
정답이 1개로 좁혀졌으므로, 출력결과는 22
입력 예제
5
15 DOWN
14 DOWN
3 UP
6 UP
10 UP
출력 결과
11 ~ 13
문제 5번
브루스는 제보(입력)받은 index부터 조사를 시작합니다.
범인이 남겨둔 발자취에 따라 추적을 하면, 테러범이 있는 곳까지 도달하게 됩니다.
아래 표를 하드코딩 하면 됩니다.
폭탄을 들고있는 [테러범]은 5번 index에 위치합니다.
브루스 탐정의 추적 시작 위치는 입력받습니다.
예를들어 [2번] index부터 조사를 시작하는 경우,
•
왼쪽으로 한 칸 이동하고 ([1번] 도착)
•
오른쪽으로 두 칸 이동하고 ([3번] 도착)
•
오른쪽으로 세 칸 이동하고 ([6번] 도착)
•
다시 왼쪽으로 한 칸 이동하여 테러범을 만날 수 있습니다. ([5번] 도착)
부르스는 어떤 경로로 테러범에게 도달했는지 역순으로 출력 해 주세요. (재귀호출을 이용 해 주세요)
예시 출력결과 : 5번 > 6번 > 3번 > 1번 > 2번
입력 예제
2
출력 결과
5번
6번
3번
1번
2번
문제 6번
먼저 N과 K를 입력 받습니다.
사이즈가 N x N 인 이미지를 입력 받아주세요. (1 <= N <= 10)
입력 받은 K 횟수 만큼 이미지를 오른쪽으로 돌린 결과를 출력 하세요.
[예시 1]
만약 n = 5, k = 1 이고, 위와 같은 이미지를 입력받았다면
다음과 같이 1회 회전시킨 후 출력 합니다.
[예시 2]
만약 n = 5, k = 2 이고, 위와 같은 이미지를 입력받았다면
다음과 같이 2회 회전시킨 후 출력 합니다.
입력 예제
5 1
1 0 1 0 1
1 1 1 1 1
0 0 1 0 0
0 0 1 0 0
0 1 0 1 0
출력 결과
0 0 0 1 1
1 0 0 1 0
0 1 1 1 1
1 0 0 1 0
0 0 0 1 1
// 수정중인 문제
문제 7번
영오는 땅을 하루아침에 물려 받게 되었습니다.
4 x 8 사이즈의 부동산 가격 정보를 입력받으세요.
할아버지 땅에서 직사각형 모양으로 땅을 선택하면, 자신의 땅이 됩니다.
(숫자 0이 써있는 곳은 땅이 아닙니다. 0이 써있는곳을 선택하면 안됩니다.)
땅의 가치가 위 그림처럼 책정 되어있을 때 영오가 가질 수 있는 최대 땅의 가치는 얼마인가요?
(적절히 함수와 for문을 이용하여 이 문제를 풀어주세요)
입력 예제
0 0 3 3 0 0 0 0
5 1 4 2 6 9 8 1
6 5 1 3 2 6 3 2
0 0 0 0 9 9 4 0
출력 결과
64