[백준] 2798번: 블랙잭 C++로 풀어보기

2023. 7. 24. 23:19·Algorithm/Baekjoon(C++)

2798번 설명

 

생각

맨 처음 든 생각:

 

벡터로 입력받아서 오름차순으로 정렬한 다음, M/3과 가장 가까운 수를 찾아서 그 수와 양 옆에 있는 수를 더한 값을 구하면 될 것 같다.

-> 정렬했을 때 붙어있는 세 값의 합만이 정답이 아니다. 반례가 있으므로 틀렸다.

 

두번째 든 생각:

 

벡터로 입력받아서 오름차순으로 정렬한 다음, (*it) + *(it+1) + *(it+2)가 m보다 클 때를 찾아서 그 때 *(it-1) + *it + *(it+1)을 구하면 될 것 같다.

-> 아까 위에 말했던 것처럼 정렬했을 때 붙어있는 세 값만이 정답이 아니다. 역시 틀렸다.

 

 

붙어있는 값들의 합만이 정답이 아니다. 그러면 어떻게 해야될까?

-> 삼중루프를 돌려서 m과 가장 가깝지만 m보다 작은 값을 찾는다.

여기서 주의해야 할 점은 삼중루프를 돌리다보니 vector의 iterator가 3개다. 그러므로 iterator가 같은 값들을 가리킬 때가 있는데 그 때는 빼주어야 한다. 아니면 같은 값을 여러번 더한 값으로 출력될 수도 있기 때문이다.

 


코드
#include <bits/stdc++.h>
using namespace std;


int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n, m;
	vector <int> v; // 숫자들을 정렬하기 위한 벡터
	vector <int> v2; // 숫자들을 비교하기 위한 벡터
	cin >> n >> m;


	while (n--) { // 숫자들을 입력받아서 벡터에 push한다.
		int x;
		cin >> x;
		v.push_back(x);
	}

	// v1 벡터를 내림차순으로 정렬(굳이 내림차순으로 안해도 된다.)
	sort(v.rbegin(), v.rend()); 
	

	for (auto it1 = v.begin(); it1 != v.end() - 2; it1++) {
		for (auto it2 = v.begin(); it2 != v.end() - 1; it2++) {
			for (auto it3 = v.begin(); it3 != v.end(); it3++) {
				// iterator들이 같지 않은 값들을 가리키고 세 수의 합이 m보다 작은 값들을 v2에 push한다.
				if (it1 != it2 && it1 != it3 && it2 != it3 && (*it1) + (*it2) + (*it3) <= m) {
					v2.push_back((*it1) + (*it2) + (*it3));
				}
			}
		}
	}
	// v2 벡터를 오름차순으로 정렬
	sort(v2.begin(), v2.end());

	// v2 벡터의 가장 오른쪽 값 출력
	cout << *(v2.end() - 1);


}

 

결과

2798번 결과

브론즈2라서 쉽게 풀릴 줄 알았는데 꽤 오래 걸렸다.

 

지금 solved.ac 클래스2 문제를 차례차례 풀어보고 있는 중이다. 7월 달 안까지는 다 끝내고 싶다.

 

배운 점:

벡터의 내림차순 정렬: sort(v.rbegin(), v.rend());

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Baekjoon(C++)' 카테고리의 다른 글

[백준] 7562번: 나이트의 이동 C++로 풀어보기  (1) 2023.07.28
[백준] 11050번: 이항 계수 1 C++로 풀어보기  (1) 2023.07.27
[백준] 5430번: AC C++로 풀어보기  (0) 2023.07.24
[백준] 3986번: 좋은 단어 C++로 풀어보기  (1) 2023.07.22
[백준] 2164번: 카드2 C++로 풀어보기  (0) 2023.07.22
'Algorithm/Baekjoon(C++)' 카테고리의 다른 글
  • [백준] 7562번: 나이트의 이동 C++로 풀어보기
  • [백준] 11050번: 이항 계수 1 C++로 풀어보기
  • [백준] 5430번: AC C++로 풀어보기
  • [백준] 3986번: 좋은 단어 C++로 풀어보기
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (177)
      • Frontend (31)
      • Fedify (4)
      • Study (42)
        • NestJS (2)
        • Node.js (3)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (21)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (9)
        • crohasang_page (2)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    KUIT
    next.js
    프로그래머스
    리액트
    알고리즘
    음악추천
    fedify
    타입스크립트
    typescript
    프로그래머스 자바스크립트
    인공지능
    javascript
    프론트엔드
    시스템프로그래밍
    HTML
    오블완
    티스토리챌린지
    자바스크립트
    react
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[백준] 2798번: 블랙잭 C++로 풀어보기
상단으로

티스토리툴바