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

C++로 세 가지 색상 조합의 결과 색상 구하기

문제 개요

세 가지 색상(G, B, Y)으로 이루어진 문자열이 주어졌을 때, 아래의 관계식을 이용해 최종적으로 얻어지는 색상을 구하는 문제입니다.

  • B * G = Y
  • Y * B = G
  • G * Y = B

예를 들어 문자열이 "GBYGB"라면 결과는 B가 되고, "BYB"라면 결과는 Y가 됩니다.

접근 방법

풀이 방법은 매우 간단합니다. 문자열의 첫 번째 문자를 초기 색상으로 설정한 뒤, 나머지 문자들을 순서대로 확인하며 현재 색상과 비교합니다. 두 색상이 서로 다르다면 위의 관계식에 따라 새로운 색상을 결정하고, 같다면 기존 색상을 그대로 유지합니다. 모든 문자를 처리하고 나면 최종 색상을 얻을 수 있습니다.

예제 코드

#include <iostream>
using namespace std;
char combination(string s) {
   char color = s[0];
   for (int i = 1; i < s.length(); i++) {
      if (color != s[i]) {
         if ((color == 'B' || color == 'G') && (s[i] == 'G' || s[i] == 'B'))
            color = 'Y';
            else if ((color == 'B' || color == 'Y') && (s[i] == 'Y' || s[i] == 'B'))
               color = 'G';
         else
            color = 'B';
      }
   }
   return color;
}
int main() {
   string color_str = "GBYBGY";
   cout << "Color Combination Result: " << combination(color_str);
}

실행 결과

Color Combination Result: B

코드 설명

combination 함수는 문자열의 첫 글자를 초기 색상으로 사용합니다. 이후 반복문을 통해 현재 색상과 다음 문자를 하나씩 비교하며, 두 색상이 다를 경우 조합 규칙에 따라 결과 색상을 갱신합니다. B와 G가 만나면 Y, B와 Y가 만나면 G, 그리고 나머지 경우인 G와 Y가 만나면 B가 됩니다.

이 알고리즘은 문자열을 한 번만 순회하므로 시간 복잡도는 O(n)이며, 문자열의 길이가 길어져도 효율적으로 동작합니다.