| Python | C++ | C | |
|---|---|---|---|
| 최댓값 탐색 | var = max( list ) | #include < algorithm > int var = *max_element( L, R ); | |
| 특정 값의 인덱스 찾기 | var = list.index( val ) | #include < algorithm > int var = max_element( L, R ) - L; | |
| 정렬 | list.sort() var = sorted( list ) | #include < algorithm > sort( L, R ); | |
| 총합 | var = sum( list ) | #include < numeric > int var = accumulate( L, R ); |
N = int(input())
bigger = True
bottom = 0
answer = 0
for top in map(int, input().split()):
if not bigger and top > bottom:
answer = 0
break
else:
if bigger and top < bottom:
bigger = False
answer += top
bottom = top
print(answer)
#include <iostream>
#include <array> // array
#include <algorithm> // sort, max_element
#include <numeric> // accumulate
using namespace std;
bool desc(int a, int b){ // 내림차순으로 정렬하기 위한 사용자 조건
return a > b;
}
int main() {
int T;
cin >> T;
// 배열 입력
array<int, 1000> arr;
array<int, 1000> duplicate;
for (int i = 0; i < T; i++){
cin >> arr[i];
duplicate[i] = arr[i];
}
// 최댓값 인덱스 탐색
int max_idx = max_element(arr.begin(), arr.begin() + T) - arr.begin();
// 최댓값을 기준으로 오름차순, 내림차순 정렬
sort(duplicate.begin(), duplicate.begin() + max_idx);
sort(duplicate.begin() + max_idx + 1, duplicate.begin() + T, desc);
// 원본 배열과 순서 비교
bool good_hamburger = true;
for (int i = 0; i < T; i++){
if (arr[i] != duplicate[i]){
good_hamburger = false;
break;
}
}
// 순서가 올바르면 총합을, 아니면 0을 출력
if (good_hamburger)
cout << accumulate(arr.begin(), arr.begin() + T, 0);
else
cout << 0;
return 0;
}

- 정수 배열이 주어졌을 때, 가장 큰 값을 기준으로 왼쪽과 오른쪽을 분리한다.
- 분리된 왼쪽 배열은 오름차순으로 정렬, 오른쪽 배열은 내림차순으로 정렬한다.
- 분리된 2개의 배열을 합친 뒤, 기존 배열과 동일한 지 비교한다.
만약에 위의 방법에서 2개의 배열이 동일하다면, 이 배열은 완벽한 햄버거라고 할 수 있습니다.
다르다면, 어딘가 문제가 있는 햄버거라는 의미가 됩니다.
제출 코드가 O(n)으로 빠르긴 하지만, if문 조건이 한 번에 이해될 것 같지 않다.
int ok = 1;
// 앞에 있는 원소들이 오름차순을 만족하는지 확인
for (int i = maxIndex - 1; i > 0; --i) {
if (K[i] > K[i + 1]) ok = 0;
}
// 뒤에 있는 원소들이 내림차순을 만족하는지 확인
for (int i = maxIndex + 1; i <= N; ++i) {
if (K[i - 1] < K[i]) ok = 0;
}
ios::sync_with_stdio(0); cin.tie(0);
for문에서 ++i로 사용
코드 작성 스타일
- for문이나 if문 내부 코드가 1줄이면 (아래로 내리지 않고) 옆에 이어서 작성
- 변수명은 Camel case로 작명
(참고. Google C++ Style Guide에서는
1) 클래스와 함수는 camelCase
2) 변수나 클래스의 필드 이름들은 snake_case
3) enum 필드의 경우 KEBAB_CASE
로 정의)
if-else문은 삼항 연산자로 축약해서 사용
Python 코드에서 사용한 방법과 시간복잡도는 O(n)으로 같지만, 해설의 코드가 더 이해하기 쉬워 보인다.
C/C++ 코드는 템플릿, STL를 익히려고 해당 기능을 모두 사용하는 코드로 작성했다.