구름톤 챌린지 1주 차 학습 일기 - 4
← 기록 / 구름톤 챌린지

구름톤 챌린지 1주 차 학습 일기 - 4

구름 이라는 곳에서 문제 풀이 챌린지(구름톤 챌린지)를 한다고 해서 참여 중이다. 이벤트 기간 동안 문제가 꾸준이 올라오며, 주에 2회씩 (혹은 그 이상) 챌린지 문제들에 대해 풀이가 가능한 문제들을 풀이해보고, 후기를 남겨보려고 한다.

이 글의 목차
  1. 구름톤 챌린지란?
  2. 문제 풀이
  3. 풀이 접근
  4. 샘플 정답 코드

구름톤 챌린지란?

구름 이라는 곳에서 문제 풀이 챌린지(구름톤 챌린지)를 한다고 해서 참여 중이다. 이벤트 기간 동안 문제가 꾸준이 올라오며, 주에 2회씩 (혹은 그 이상) 챌린지 문제들에 대해 풀이가 가능한 문제들을 풀이해보고, 후기를 남겨보려고 한다.

문제 풀이

풀이 접근

이 문제의 경우 사람이 완벽한 햄버거 를 판정한다면 어떻게 할 수 있을지 생각해보면 쉽다. 우선, 최대값을 찾는다. 그리고, 최대값 좌/우측으로 그 값보다 같거나 작은 값이 계속해서 나와야 한다는 사실을 관찰할 수 있다.

즉, 투 포인터 를 사용하는 느낌으로 풀면 되는 문제이며, 시간복잡도는 O(N)O(N)이 된다. 아직 Python이 익숙하지 않기 때문에 이 문제는 기존처럼 C++로 풀이해보았다.

샘플 정답 코드

#include <bits/stdc++.h>
using namespace std;
int main() {
	int N; scanf("%d", &N);
	vector<int> A;
	int maxval = 0;
	int maxpos = -1;
	int sum = 0;
	for(int i = 0; i < N; ++i) {
		int tmp; scanf("%d", &tmp);
		A.push_back(tmp);
		sum += tmp;
		if (tmp > maxval) {
			maxpos = i;
			maxval = tmp;
		}
	}
	bool flag = true;
	for(int i = maxpos; i >= 1; --i) {
		if (A[i - 1] <= A[i]) continue;
		flag = false;
	}
	for(int i = maxpos; i < N - 1; ++i) {
		if (A[i] >= A[i + 1]) continue;
		flag = false;
	}
	if (flag) {
		printf("%d\n", sum);
	} else {
		printf("0\n");
	}
	return 0;
}
AI로 읽기 · Markdown

로그인 없이 읽는 Markdown 원문.

Markdown 열기 ↗
curl -fsSL 'https://www.readiz.com/blog/history/grt/grt-week1_4/index.md'

서비스 열기

열기 방식을 선택해 주세요.

로그인이 필요하거나 창 안에서 열리지 않는 서비스는 현재 탭에서 열어 주세요.