일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 네트워크 관리사 2급
- 우테코
- 싸피셜
- it 뉴스
- 코딩테스트
- SSAFY
- IT 동향
- KT
- 네트워크 관리사 2급 실기
- 카카오
- IT 트렌드
- 신문 스크랩
- 백준
- 코테
- java 객체지향 프로그래밍
- html
- python
- 네트워크 관리사
- it 이슈
- 싸피
- 구글
- 백준위
- SSAFY 7기
- 인앱결제
- 리얼클래스
- 코딩테스트 연습
- 프로그래머스
- SSAFYcial
- 신문스크랩
- Java
Archives
- Today
- Total
개발자일걸요..?
1932번 정수 삼각형 본문
728x90
반응형
문제링크 : www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
<알고리즘>
동일한 계산을 반복하는 것을 막기 위해(동적 계획법) 위에서 부터 아래로 계산해 내려감
1) 0번째줄은 변동될 사항이 없으므로 생략. 1번째 줄 부터 윗줄로부터 영향을 받아 변경될 수 있는 수 중 가장 큰 수로 값 변경
1-1) 매 줄의 0번째 값은 바로 윗줄의 0번째 값으로만 영향을 받음
1-2) 매 줄의 마지막 값은 바로 윗줄의 마지막 값으로만 영향을 받음
1-3) 그 외의 값들의 윗 줄의 대각선 두 값중 큰 값을 골라서 더함
2) 매 줄의 매 칸마다 계산하는 동안 max값과 비교하여 가장 큰 값 찾기
메모리 : 2940KB 메모리 44ms
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N = 0;
cin >> N;
vector<vector<int>> triangle(N, vector<int>(N));
int a = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j <= i; j++) {
cin >> a;
triangle[i][j] = a;
}
}
int max = 0;
for (int i = 1; i < N; i++) {
for (int j = 0; j <= i;j++) {
if (j == 0) {
triangle[i][j] += triangle[i - 1][0];
}
else if (j == i) {
triangle[i][j] += triangle[i - 1][j - 1];
}
else {
//윗라인 대각선의 두 수 중 큰 쪽 선택
triangle[i][j] += ((triangle[i - 1][j - 1] >= triangle[i - 1][j]) ? triangle[i - 1][j - 1] : triangle[i - 1][j]);
}
if (max <= triangle[i][j]) max = triangle[i][j];
}
}
cout << max << "\n";
return 0;
}
반응형
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
11053번 가장 긴 부분수열 (0) | 2021.03.15 |
---|---|
10844번 쉬운 계단 수 (0) | 2021.03.11 |
1655번 가운데를 말해요 (0) | 2021.03.09 |
11286번 절댓값 힙 (0) | 2021.03.08 |
1463번 1로 만들기 (0) | 2021.03.07 |
Comments