티스토리 뷰
반응형
https://www.acmicpc.net/problem/1744
1744번: 수 묶기
길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에
www.acmicpc.net
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 그리디 알고리즘
- 정렬
⊙ 문제 접근 과정
진짜 엄청 많이 틀리고 맞췄다...
단순히 정렬하고 높은 수끼리 곱하고 음수는 음수끼리 곱하면 될 줄 알았던 내 과오였다.
문제에 예외 케이스가 생각보다 다양하게 존재한다.
첫 번째로 누구나 생각할 수 있는 음수 X 음수 조합
음수 X 음수 = 양수로 최댓값을 극대화할 수 있다.
두 번째로 0과 음수 조합
0 X 음수 = 0으로 음수를 없앰으로써 최댓값을 극대화할 수 있다.
세 번째로 1 X 1 조합
1 X 1 = 1이다. 하지만 1 + 1은 2이다.
곱셈이 아닌 덧셈으로써 최댓값을 극대화할 수 있다.
마지막으로 1이 들어간 조합
양수 X 1 = 양수이다. 하지만 양수 + 1은 양수 +1이다.
마찬가지로 곱셈이 아닌 덧셈으로써 최댓값을 극대화할 수 있다.
⊙ 문제 풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<int> pLus;
vector<int> mInus;
int main() {
cin >> N;
for(int i=0;i<N;i++) {
int x;
cin >> x;
if(x>0)
pLus.push_back(x);
else
mInus.push_back(x);
}
sort(pLus.rbegin(),pLus.rend());
sort(mInus.begin(),mInus.end());
int total=0;
int ps = pLus.size()-1;
int ms = mInus.size()-1;
if(pLus.size()%2) {
for(int i=0;i<ps;i+=2) {
if(pLus[i] ==1 || pLus[i+1] ==1){
total+=pLus[i]+pLus[i+1];
} else total+=pLus[i]*pLus[i+1];
}
total+=pLus[ps];
} else {
for(int i=0;i<ps;i+=2)
if(pLus[i] ==1 || pLus[i+1] ==1){
total+=pLus[i]+pLus[i+1];
} else total+=pLus[i]*pLus[i+1];
}
if(mInus.size()%2) {
for(int i=0;i<ms;i+=2)
total+=mInus[i]*mInus[i+1];
total+=mInus[ms];
} else {
for(int i=0;i<ms;i+=2)
total+=mInus[i]*mInus[i+1];
}
cout << total;
}
⊙ 결과
⊙ 마무리
누군가에게 도움이 되길 바라며...
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > C++ [CPP]' 카테고리의 다른 글
[백준(BOJ)] 1138번 : 한 줄로 서기 - C++[CPP] (1) | 2021.06.27 |
---|---|
[백준(BOJ)] 1074번 : Z - C++[CPP] (0) | 2021.06.26 |
[백준(BOJ)] 16953번 : A → B - C++[CPP] (0) | 2021.06.25 |
[백준(BOJ)] 1543번 : 문서 검색 - C++[CPP] (0) | 2021.06.25 |
[백준(BOJ)] 1449번 : 수리공 항승 - C++[CPP] (0) | 2021.06.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 해답
- 파이썬
- py
- 운영체제
- java
- 자바스크립트
- Python
- 풀이
- C++
- 알고리즘
- 자바
- 연습문제
- 구현
- BFS
- JS
- 정렬
- 그리디
- 쉽게배우는자바프로그래밍
- 문자열
- Web
- 백준
- 정리
- CPP
- OS
- 쉽게 배우는 자바 프로그래밍
- 프로그래머스
- 우종정
- 답
- 쉽게배우는
- 정답
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함