[백준 11399] ATM (C++)

2024. 3. 20. 15:20·PS/백준 알고리즘[BOJ]
728x90

1. 문제

https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

2. 접근 방법

그리디를 떠올릴 수만 있다면 아주 쉬운 문제입니다. 하지만 그리디를 떠올리기 쉽지 않으므로 항상 일관된 알고리즘적 사고가 필요한 것 같습니다. 따라서 평소처럼 일관된 방법으로 접근했습니다.

아이디어

  1. 완전 탐색으로 생각해볼 때 나올 수 있는 모든 가지수는 1000!입니다. 팩토리얼의 허용 범위는 11이므로 불가능합니다.
  2. 완전 탐색이 불가능하여 DP로 접근해보았습니다. 이 문제의 조건을 보니 조합이 아니라 순열입니다. 즉, 데이터의 순서가 중요합니다. 쉽게 말해서 i번째 값을 넣고/안넣고의 가지수를 탐색하는 것이 아니라 i번째 데이터가 어느 자리에 들어가는지가 이후에 큰 영향을 미칩니다. 결국 DP로 풀어도 1000! 가지수의 배열칸이 필요하다는 것을 알 수 있습니다. 
  3. 혹시 그리디가 아닐까 의심해보고 인출 시간이 작은 값이 앞에올수록 전체 합은 작아진다 라는 가설을 세워봤습니다. 시뮬레이션 결과 반례가 존재하지 않는 것 같아 그대로 진행했습니다.

풀이

그리디를 떠올리기만 했다면 풀이는 간단합니다. sort함수를 이용하여 데이터를 오름차순으로 정렬한 뒤 누적합을 구해주기만 하면 됩니다.

 

3. 코드

#include<iostream>
#include<algorithm>

using namespace std;
int N, sum, ans;
int p[1001];
int main(void) {
	cin.tie(0);
	ios_base::sync_with_stdio(0);

	cin >> N;
	for (int i = 1; i <= N; i++) cin >> p[i];
	sort(p, p + N + 1);

	//solve
	for (int i = 1; i <= N; i++) {
		sum += p[i];
		ans += sum;
	}
	cout << ans;
	return 0;
}
728x90
저작자표시 비영리 (새창열림)

'PS > 백준 알고리즘[BOJ]' 카테고리의 다른 글

[백준 10844] 쉬운 계단 수 (C++)  (0) 2024.04.18
[백준 1043] 거짓말 (C++)  (0) 2024.04.08
[백준 11054번] 가장 긴 바이토닉 부분 수열 (C++)  (0) 2024.01.08
[백준 1238번] 파티 (C++)  (1) 2024.01.04
[백준 13164번] 행복 유치원 (C++)  (1) 2023.12.21
'PS/백준 알고리즘[BOJ]' 카테고리의 다른 글
  • [백준 10844] 쉬운 계단 수 (C++)
  • [백준 1043] 거짓말 (C++)
  • [백준 11054번] 가장 긴 바이토닉 부분 수열 (C++)
  • [백준 1238번] 파티 (C++)
BE_개발자
BE_개발자
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
    250x250
  • BE_개발자
    경이로운 개발일기
    BE_개발자
  • 전체
    오늘
    어제
    • 전체 보기 (213)
      • AI (1)
        • AI native (0)
        • Skill (0)
      • SpringBoot (4)
        • JPA (3)
        • Security (0)
        • 튜토리얼 (1)
        • 기타 (0)
      • Infra (0)
        • Docker (0)
        • AWS (0)
        • NCP (0)
        • GCP (0)
      • React (19)
      • 서버 (0)
      • Computer Science (16)
        • SW Engineering (10)
        • Data Base (2)
        • OS(운영 체제) (4)
      • Data science (0)
        • Probability & Random Variab.. (0)
        • Data Analysis(데이터 분석) (0)
      • 자료구조 | 알고리즘 (57)
        • 선형 자료구죠 (6)
        • 비선형 자료구조 (9)
        • 정렬(Sort) (3)
        • 탐색(Brute Force) (7)
        • 분할 정복(Devide Conquer) (3)
        • 동적 계획법 (6)
        • 탐욕(Greedy) (2)
        • 수학 (7)
        • 심화 알고리즘 (10)
      • PS (44)
        • 백준 알고리즘[BOJ] (38)
        • 프로그래머스[programmers] (3)
      • Dev tool (15)
        • 개발 도구 및 환경 (0)
        • vscode (3)
        • Git Hub (4)
        • Chrome 웹스토어 (5)
        • Python 전용 개발환경 (0)
      • 성장기록 (1)
      • 개인 project (14)
        • 홈페이지 만들기 (11)
        • 냉보미 (1)
      • STL(Standard Library) (9)
      • programming Language (1)
        • javascript (1)
      • 기타 (13)
        • html css (11)
      • (책, 글, 블로그)리뷰 (3)
  • 블로그 메뉴

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

    • 백준
    • Github
    • Notion
    • 서울과학기술대학교 학술동아리 EC
  • 공지사항

  • 인기 글

  • 태그

    자료구조
    CS
    OS
    탐색
    백준
    알고리즘
    BFS
    스택
    괄호쌍
    운영체제
    수학
    완전 탐색
    react
    백트래킹
    SW Engineering
    PS
    stack
    비트마스킹
    C++
    그리디
    스프링부트
    stl
    분할정복
    브루트포스
    재귀함수
    이분 탐색
    DP
    SW 공학
    순열
    프론트엔드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
BE_개발자
[백준 11399] ATM (C++)
상단으로

티스토리툴바