본문 바로가기

누적 합17

[백준] 20159번 : 동작 그만. 밑장 빼기냐? (C++) 20159번 : 동작 그만. 밑장 빼기냐? 문제) 싸늘하다. 정훈이는 다음과 같은 도박을 하고 있다. N개의 카드와 2명의 플레이어가 있다. 플레이어가 자신과 상대방에게 번갈아 가며 카드의 윗장부터 한 장씩 분배한다. 단, 카드는 분배한 사람부터 받는다. 카드를 모두 분배했을 때 카드에 적힌 수의 합이 더 큰 사람이 이긴다. 두 명이 공평하게 카드를 나눠 갖기 위해 카드의 개수는 짝수로 주어진다. 카드를 섞고 있는 정훈이는 타짜다. 수없이 많이 카드를 섞어본 경험으로 섞고 난 후 카드의 값들을 다 알고 있다. 정훈이에게 카드를 분배할 수 있는 기회가 왔다. 확실한 승리를 위해 카드를 분배할 때 카드의 윗장이 아닌 밑장을 빼는 밑장 빼기를 하기로 마음을 먹었다. 상대는 눈치가 빠르기로 유명한 선수이므로 밑.. 2024. 2. 11.
[백준] 28449번 : 누가 이길까 (C++) 28449번 : 누가 이길까 문제) HI-ARC는 종강을 맞아 HI팀과 ARC팀으로 나누어 친선대회를 열려고 한다. HI팀엔 N명 ARC팀엔 M명이 속해있다. 대회는 다른 팀끼리 모든 사람들끼리 한번씩 대결을 하는 것으로, 대회는 N × M개의 대결로 이루어진다. 모든 참가자는 코딩실력을 가지고 있다. 대결을 하면 더 높은 코딩실력을 가진 참가자가 승리하고, 두 참가자의 코딩실력이 같다면 무승부가 된다. 하얔이는 이 대회의 결과를 빨리 알고싶어졌다. 하얔이를 위해 대회의 결과를 예측해보자! 입력 : 첫째 줄에 HI팀의 인원 수 N, ARC팀의 인원 수 M이 공백으로 구분되어 정수로 주어진다. (1≤ N , M ≤100000) 둘째 줄에 HI팀의 참가자의 코딩실력을 나타내는 길이 N 수열 a_i가 공백으로.. 2024. 2. 4.
[백준] 1687번 : 행렬 찾기 (C++) 1687번 : 행렬 찾기 문제) 0과 1로 이루어진 행렬이 있다. 이 행렬의 부분행렬은 이 행렬 안에 포함되는 행렬을 의미한다. 이러한 부분행렬들 중에서 0으로만 이루어진 부분행렬을 찾으려 한다. 그 중에서 가장 면적이 넓은 것을 구해내는 프로그램을 작성하시오. 입력 : 첫째 줄에 행렬의 크기를 나타내는 두 정수 N, M(1≤N, M≤333)이 주어진다. 다음 N개의 줄에는 M개의 정수(0또는 1)가 공백없이 주어진다. 이 숫자는 행렬을 구성하는 원소이다. 출력 : 첫째 줄에 답을 출력한다. 풀이) 일반적인 4중 for문에서 어떻게 해야 3중 for문으로 줄일 수 있을지 생각해보는게 중요한 문제였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2.. 2024. 1. 30.
[백준] 2143번 : 두 배열의 합 (C++) 2143번 : 두 배열의 합 문제) 한 배열 A[1], A[2], …, A[n]에 대해서, 부 배열은 A[i], A[i+1], …, A[j-1], A[j] (단, 1 ≤ i ≤ j ≤ n)을 말한다. 이러한 부 배열의 합은 A[i]+…+A[j]를 의미한다. 각 원소가 정수인 두 배열 A[1], …, A[n]과 B[1], …, B[m]이 주어졌을 때, A의 부 배열의 합에 B의 부 배열의 합을 더해서 T가 되는 모든 부 배열 쌍의 개수를 구하는 프로그램을 작성하시오. 예를 들어 A = {1, 3, 1, 2}, B = {1, 3, 2}, T=5인 경우, 부 배열 쌍의 개수는 다음의 7가지 경우가 있다. T(=5) = A[1] + B[1] + B[2] = A[1] + A[2] + B[1] = A[2] + B[.. 2024. 1. 29.