Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C++로 두 번째 정당이 승리하기 위한 최소 표 수 k 찾기

    크기가 n인 배열 A가 있다고 가정해 봅시다. 한 학교에 학생이 n명 있으며, 각 학생은 정확히 k개의 표를 가지고 있고 모든 표를 반드시 사용해야 합니다. 후보 정당은 두 개입니다. 배열의 값 A[i]는 i번째 학생이 첫 번째 정당에게 A[i]만큼의 표를 던졌다는 의미이며, 그렇다면 두 번째 정당은 자동으로 k - A[i]개의 표를 받게 됩니다.여기서 두 번째 정당이 선거에서 승리할 수 있도록 k를 설정하려고 합니다. 이때 가능한 k의 최솟값은 얼마일까요?예를 들어 입력이 A = [2, 2, 3, 2, 2]라고 해 보겠습니다. 첫

  2. C++ 프로그램으로 두 번째 날 돌 더미 상태가 유효한지 확인하기

    문제 소개 크기가 같은 두 배열 X와 Y가 주어졌다고 가정해 보겠습니다. 첫째 날에는 i번째 위치에 X[i]개의 돌을 가진 더미가 있고, 둘째 날에는 같은 위치에 Y[i]개의 돌이 있다고 합니다. 이틀 사이에 여러 사람이 돌 더미를 방문했으며, 이들이 할 수 있는 행동은 다음 세 가지뿐입니다. 아무것도 하지 않는다 어떤 더미에 돌 몇 개를 추가한다 한 더미에서 다른 더미로 돌 몇 개를 옮긴다 이때 우리가 확인해야 할 것은 Y가 X로부터 실제로 발생할 수 있는 유효한 상태인지 여부입니다. 예를 들어 입력이 X = [1, 2, 3,

  3. C++로 n보다 크면서 k로 나누어 떨어지는 가장 작은 정수 구하기

    두 개의 숫자 n과 k가 주어졌을 때, n보다 크면서 k로 나누어 떨어지는 가장 작은 정수 x를 구하는 문제입니다.예를 들어 n = 5, k = 3이 입력으로 주어진다면, 5보다 크면서 3으로 나누어 떨어지는 가장 작은 수는 6이므로 출력 결과는 6이 됩니다.해결 방법이 문제는 복잡한 반복문 없이 간단한 수식 하나로 해결할 수 있습니다.return n + k - (n mod k)이 공식의 동작 원리는 다음과 같습니다.n % k는 n을 k로 나눈 나머지를 의미합니다.k - (n % k)는 n에서 다음 배수까지 남은 거리를 나타냅니다.

  4. C++로 행렬 속 검은 정사각형의 중심 좌표 찾기

    문제 개요n × m 크기의 행렬이 있다고 가정해 보겠습니다. 각 칸은 흰색(W) 또는 검은색(B)으로 표시되어 있습니다. 이 표 내부에는 한 변의 길이가 홀수인 정사각형 하나가 검은색으로 칠해져 있으며, 우리가 해야 할 일은 바로 이 정사각형의 중심 좌표를 찾는 것입니다.예를 들어 입력이 다음과 같다고 해보죠.WWBBBWWWBBBWWWBBBWWWWWWWWWWWWW이 경우 출력 결과는 (3, 1)이 됩니다.해결 접근 방식이 문제의 핵심 아이디어는 매우 간단합니다. 검은색으로 칠해진 정사각형의 한 변 길이가 항상 홀수이기 때문에, 모든

  5. C++로 문자열의 마지막 글자가 모음인지 검사하는 방법

    문제 설명문자열 S가 주어졌다고 가정해 봅시다. 아말(Amal)과 비말(Bimal)은 다음과 같은 규칙의 게임을 하고 있습니다. 먼저 플레이하는 사람, 즉 아말은 탐정 역할을 맡아 사건을 조사하고 원인을 밝혀내야 합니다. 아말은 답이 예(Yes) 또는 아니오(No)로 나뉘는 질문을 자유롭게 던질 수 있습니다. 이때 질문의 마지막 글자가 모음이라면 상대방은 예라고 답하고, 그렇지 않다면 아니오라고 답합니다. 여기서 모음은 A, E, I, O, U, Y 여섯 개입니다. 우리에게 질문 문자열 S가 주어지며, 이에 대한 답을 구하는 것이

  6. C++로 이진 문자열에서 최소 올바른 문자열 찾기

    n비트로 구성된 이진 문자열 S가 있다고 가정해 보겠습니다. 이 문자열에는 불필요한 선행 0(leading zero)이 없습니다. 우리는 S에 대해 다음 두 가지 연산을 수행할 수 있습니다.인접한 두 비트의 위치를 서로 교환(swap)문자열에 있는 모든 11을 1로 치환val(S)를 S의 10진수 값이라고 정의할 때, 올바른(correct) 문자열 A가 다른 올바른 문자열 B보다 작다는 것은 val(A) < val(B)일 때를 의미합니다. 우리의 목표는 주어진 조건에서 만들 수 있는 가장 작은 올바른 문자열을 찾는 것입니다.예를 들

  7. C++로 주어진 행렬이 줄무늬 깃발 조건을 만족하는지 확인하는 방법

    n × m 크기의 행렬이 있다고 가정해 보겠습니다. 각 셀에는 0부터 9 사이의 값 중 하나가 저장됩니다. 여기서 깃발(flag)은 줄무늬 형태여야 한다는 조건이 있습니다. 즉, 각 가로 행은 모두 같은 색상의 칸으로 이루어져야 하며, 인접한 두 가로 행은 서로 다른 색상이어야 합니다. 우리가 할 일은 주어진 행렬이 이러한 조건을 만족하는 유효한 깃발인지 검사하는 것입니다.예를 들어 입력이 다음과 같다면,000111333첫 번째 행은 모두 0, 두 번째 행은 모두 1, 세 번째 행은 모두 3으로 구성되어 있고, 인접한 행들의 색상도

  8. 순환선 지하철에서 두 역 사이의 최단 거리를 구하는 C++ 코드

    문제 설명두 개의 수 s와 t, 그리고 n개의 원소로 이루어진 배열 D가 있다고 가정해 보겠습니다. 드림랜드(Dreamland) 지하철의 순환선에는 n개의 서로 다른 역이 있으며, 인접한 역들 사이의 거리가 모두 주어져 있습니다. 즉, D[i]는 i번 역과 (i+1)번 역 사이의 거리를 나타내고, D[n-1]은 (n-1)번 역과 0번 역 사이의 거리를 의미합니다. 이때 s역에서 t역까지 이동할 때의 최단 거리를 구하는 것이 목표입니다.예를 들어 입력이 s = 1, t = 3, D = [2, 3, 4, 9]라고 한다면, 출력 결과는

  9. C++로 로봇 이동 문자열 압축하기: RU·UR 쌍을 대각선 D로 병합하는 방법

    문제 개요 n개의 문자로 이루어진 문자열 S가 있다고 가정해 봅시다. 각 문자는 R 또는 U입니다. 2차원 평면 위의 로봇은 오른쪽 또는 위로만 이동할 수 있으며, R을 만나면 오른쪽으로, U를 만나면 위로 움직입니다. 그런데 문자열이 너무 길다면 이를 더 짧게 압축하는 것이 좋겠죠. 여기서 RU 또는 UR로 이루어진 연속된 두 문자는 대각선 이동을 의미하는 D 하나로 대체됩니다. 우리가 구해야 할 값은 바로 이렇게 압축된 최종 문자열의 길이입니다. 예를 들어 입력이 S = RUURU라고 한다면, 출력은 3이 됩니다. 문자열이 D

  10. C++로 문자열 S를 부분 수열로 갖는 회문 문자열 찾기

    길이가 n인 문자열 S가 주어졌을 때, S를 부분 수열(subsequence)로 포함하면서 그 자체로 회문(palindrome)이 되는 또 다른 문자열 T를 찾는 문제입니다.예를 들어 S = ab가 입력으로 주어지면 출력은 aabaa가 됩니다. 물론 정답은 하나로 정해져 있지 않으며, 조건을 만족하는 다른 문자열도 충분히 가능합니다.해결 아이디어접근 방법은 매우 직관적입니다. 원래 문자열 S에 S를 거꾸로 뒤집은 문자열을 그대로 이어 붙이면 됩니다. 이렇게 하면 결과 문자열이 좌우 대칭 구조를 갖게 되어 자동으로 회문이 되고, 앞부

  11. C++로 주어진 배열의 국소 극값 개수 계산하기

    길이가 n인 배열 A가 있다고 가정해 봅시다. 배열의 어떤 원소 A[i]가 양쪽 이웃한 원소보다 엄격하게 작으면 국소 최솟값(local minimum)이라고 부르고, 반대로 양쪽 이웃한 원소보다 엄격하게 크면 국소 최댓값(local maximum)이라고 부릅니다. 다만 첫 번째 원소 A[0]과 마지막 원소 A[n-1]은 이웃이 하나뿐이므로 극댓값이나 극솟값으로 간주하지 않습니다. 이 문제의 목표는 주어진 배열에서 이러한 국소 극값(local extrema)의 총 개수를 구하는 것입니다.예를 들어 입력이 A = [1, 5, 2, 5]

  12. C++로 책을 다 읽는 데 필요한 일수 계산하기

    길이가 n인 배열 A와 정수 t가 주어져 있다고 가정해 보겠습니다. Amal은 i번째 날에 업무로 A[i]초를 소비하고, 남은 여가 시간에 책을 읽습니다. 책 전체를 읽는 데는 총 t초가 필요하며, 우리가 구해야 할 것은 책을 끝까지 읽기 위해 며칠이 걸리는지입니다. 예를 들어 입력이 A = [86400, 86398], t = 2라면 출력은 2가 됩니다. 하루는 86400초인데 첫째 날은 업무 시간으로 가득 차 있어 독서할 시간이 전혀 없습니다. 반면 둘째 날에는 2초의 여유가 생기므로 그날 책을 마칠 수 있기 때문입니다. 문제

  13. C++로 만들 수 있는 최대 3인 팀 수 계산하기

    크기가 n인 배열 A가 있다고 가정해 보겠습니다. 이 배열은 n개의 학생 그룹을 나타내며, 각 그룹은 다음 두 가지 유형 중 하나입니다. 1인 그룹 : 누구와도 자유롭게 팀을 이룰 수 있는 학생 한 명 2인 그룹 : 반드시 같은 팀에서 함께 코드를 작성하고 싶어 하는 학생 두 명 멘토는 정확히 3명으로 구성된 팀을 만들어야 합니다. 우리가 구해야 할 것은 멘토가 만들 수 있는 3인 팀의 최대 개수입니다. 단, 2인 그룹의 경우 두 학생이 모두 참여하거나 모두 빠져야 하며, 참여한다면 반드시 같은 팀에 배정되어야 한다는 조건이 있

  14. C++로 구현하는 개구리 최소 점프 문제 풀이

    길이가 n인 이진 문자열 S와 정수 d가 하나씩 주어져 있다고 가정해 보겠습니다. 수직선 위에서 개구리는 1번 지점에서 출발해 n번 지점까지 이동해야 합니다. 개구리는 한 번의 점프로 오른쪽 방향으로 최대 d만큼 움직일 수 있으며, 1부터 n까지 각 지점에는 연꽃이 있으면 1, 없으면 0이 표시되어 있습니다. 개구리는 연꽃이 있는 지점에만 착지할 수 있습니다. 따라서 우리가 구해야 하는 것은 개구리가 n에 도달하기 위해 필요한 최소 점프 횟수이며, 도달이 불가능한 경우에는 -1을 반환해야 합니다.예를 들어 입력이 S = 100101

  15. C++로 두 프레스 사이에서 사람이 살아남는 시간 계산하기

    이 문제에서는 네 개의 숫자 d, L, v1, v2가 주어집니다. 두 개의 프레스(press)가 각각 위치 0과 위치 L에 있으며, 서로를 향해 속도 v1과 v2로 다가갑니다. 사람의 몸 너비는 d이며, 두 프레스 사이의 간격이 d보다 좁아지면 사람은 압사하게 됩니다. 우리가 구해야 할 것은 이 사람이 살아남을 수 있는 시간입니다.예를 들어 입력이 d = 1, L = 9, v1 = 1, v2 = 2라고 가정해 봅시다. 그렇다면 출력 결과는 2.6667이 됩니다.문제 풀이 접근 방식이 문제를 해결하기 위해 다음 단계를 따릅니다.두 프

  16. C++로 돌을 나눠줄 수 있는 최대 횟수 계산하는 방법

    숫자 n이 주어졌다고 가정해 봅시다. 아말(Amal)은 비말(Bimal)에게 돌을 여러 번에 걸쳐 나누어 줍니다. 단, 한 차례에서 k개의 돌을 주었다면 바로 다음 차례에는 k개를 줄 수 없습니다. 즉, 연속된 두 차례에서 주는 돌의 개수는 반드시 서로 달라야 합니다. 우리가 구해야 할 것은 아말이 비말에게 돌을 줄 수 있는 총 횟수입니다. 예를 들어 입력이 n = 4라면 출력은 3이 됩니다. 처음에 1개, 그다음에 2개, 마지막에 다시 1개를 주면 총 4개의 돌을 세 번에 나누어 줄 수 있기 때문입니다. 풀이 접근 이 문제는 다

  17. C++로 구하는 시간 t에 서 있는 관중 수 – 멕시코 웨이브 문제 풀이

    n, k, t 세 개의 정수가 주어질 때, 시간 t에 서 있는 관중의 수를 구하는 문제입니다. Amal은 멕시코 웨이브(Mexican Wave)를 분석하고 있으며, 1번부터 n번까지 번호가 매겨진 관중 n명이 있고 시간은 0부터 시작합니다.문제 설명웨이브는 다음과 같은 규칙으로 진행됩니다.시간 1에 첫 번째 관중이 일어섭니다.시간 2에 두 번째 관중이 일어섭니다.시간 k에 k번째 관중이 일어서고, 시간 k+1에는 (k+1)번째 관중이 일어서는 동시에 첫 번째 관중이 앉습니다.시간 k+2에는 (k+2)번째 관중이 일어서고 두 번째 관

  18. C++로 n개 픽셀에 맞는 직사각형 화면 크기 구하기

    숫자 n이 주어졌다고 가정해 봅시다. 디스플레이에는 총 n개의 픽셀이 표시되며, 우리는 이를 만족하는 직사각형 화면의 크기를 찾아야 합니다. 조건은 다음과 같습니다.행의 개수(a)는 열의 개수(b)를 초과하지 않아야 합니다 [a <= b]b와 a의 차이(b - a)는 가능한 한 최소여야 합니다예를 들어 입력이 n = 12라면, 출력은 (3, 4)가 됩니다.풀이 접근 방법이 문제를 해결하기 위해 다음 단계를 따릅니다.i := n의 제곱근 while n mod i가 0이 아니면:    (i를 1씩 감소) retu

  19. C++로 종이 시트 팩 구매 수량 계산하기

    네 개의 숫자 k, n, s, p가 주어진다고 가정해 봅시다. 종이 비행기를 만들려면 직사각형 모양의 종이 조각이 필요하며, 표준 크기의 종이 한 장으로는 s개의 비행기를 만들 수 있습니다.이제 k명으로 이루어진 그룹이 각자 n개의 비행기를 만들기로 결정했습니다. 이들은 종이 p장이 들어 있는 팩 여러 개를 구매한 뒤, 종이를 서로 나누어 가질 계획입니다. 각 사람은 자신이 만들 n개의 비행기를 완성할 수 있도록 충분한 양의 종이를 받아야 합니다. 그렇다면 최소 몇 개의 팩을 구매해야 할까요?예를 들어 입력이 k = 5, n = 3

  20. C++ 코드로 풀기: 아말이 경기를 시청하는 총 시간 계산하기

    문제 개요n개의 요소를 가진 배열 A가 있다고 가정해 보겠습니다. 아말(Amal)은 하프타임 없이 진행되는 90분짜리 경기를 시청하려고 합니다. 경기의 매 순간(1분 단위)은 재미있는 순간이거나 지루한 순간일 수 있으며, 만약 연속해서 15분 동안 지루한 구간이 이어진다면 아말은 즉시 TV를 꺼 버립니다.배열 A에는 재미있는 순간이 발생한 시점(분)이 담겨 있습니다. 우리의 목표는 아말이 실제로 경기를 시청하는 총 시간이 몇 분인지 계산하는 것입니다.예를 들어 입력이 A = [7, 20, 88]이라면 출력은 35가 됩니다. 7분과

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:299/300  20-컴퓨터/Page Goto:1 293 294 295 296 297 298 299 300