#1527
Bronze III

색각 보정

시간 제한
1s
메모리 제한
512MB
제출
59
정답
30
맞힌 사람
26
정답 비율
54.2%

문제

현대 운영체제의 윈도우 매니저와 그래픽스 파이프라인은 다양한 유형의 색각 이상을 가진 사용자를 위해 화면의 각 픽셀 색상을 실시간으로 보정하는 셰이더 필터를 제공한다.

그래픽스 파이프라인은 3차원 장면을 화면에 표시할 수 있는 2차원 이미지로 변환하는 일련의 과정이다. 이 과정은 여러 단계로 구성되며, 일부 단계에서는 셰이더를 사용해 픽셀의 색상을 계산하거나 다양한 시각적 효과를 표현한다. 예를 들어, 셰이더로 각 픽셀의 색상을 실시간으로 조정하는 필터를 구현해 색각 이상이 있는 사용자가 화면의 색을 더 쉽게 구별하도록 도울 수 있다.

컴퓨터 화면의 단일 픽셀은 00 이상 255255 이하의 정수로 구성된 세 가지 색상 성분 (R,G,B)(R, G, B)로 표현된다. 화면 전체의 색상 그러데이션 경계선이 왜곡되는 현상을 방지하기 위해, 시스템은 특정 색을 임의로 치환하는 대신 각 픽셀 벡터에 선형 변환 행렬을 곱하여 연속적인 색 공간 투영 연산을 수행한다.

당신은 그래픽스 파이프라인의 색각 보정 모듈을 구현해야 한다. 적용할 필터 모드 문자열 MM과 원본 색상 (R,G,B)(R, G, B)가 주어졌을 때, 아래의 변환 수식을 적용하여 변환한 픽셀의 세 성분 (R′,G′,B′)(R', G', B')를 출력해보자.

  • GRAY: (표준 흑백 모드 - ITU-R BT.601) 인간 시각의 녹색 민감도를 반영한 명도 가중합 YY를 계산하여 모든 채널에 적용한다.
Y=0.299R+0.587G+0.114B,R′=YG′=YB′=Y\begin{aligned} Y &= 0.299R + 0.587G + 0.114B, \\ R' &= Y \\ G' &= Y \\ B' &= Y \end{aligned}
  • PROTAN: (제1색각이상 / 적색약 보정 모드) 적색 원추세포의 손실 정보를 녹색 및 파랑 축으로 재분배한다.
R′=0.567R+0.433G,G′=0.558R+0.442G,B′=0.242G+0.758B\begin{aligned} R' &= 0.567R + 0.433G, \\ G' &= 0.558R + 0.442G, \\ B' &= 0.242G + 0.758B \end{aligned}
  • DEUTER: (제2색각이상 / 녹색약 보정 모드) 녹색 원추세포의 손실 정보를 적색 및 파랑 축으로 재분배한다.
R′=0.625R+0.375G,G′=0.700R+0.300G,B′=0.300G+0.700B\begin{aligned} R' &= 0.625R + 0.375G, \\ G' &= 0.700R + 0.300G, \\ B' &= 0.300G + 0.700B \end{aligned}

계산한 각 성분은 가장 가까운 정수로 반올림한다. 정확히 두 정수의 중간인 값은 더 큰 정수로 반올림한다. 예를 들어 12.512.5는 1313이 된다.

필터 모드와 픽셀의 세 성분이 주어질 때, 변환한 픽셀의 세 성분을 구하여라.

입력

첫째 줄에 필터 모드 MM이 주어진다. MM은 GRAY, PROTAN, DEUTER 중 하나이다.

둘째 줄에 세 정수 RR, GG, BB가 공백으로 구분되어 주어진다. (0≤R,G,B≤255)(0 \le R, G, B \le 255)

출력

변환한 픽셀의 세 성분 R′R', G′G', B′B'를 반올림한 정수를 공백으로 구분하여 출력한다.

예제 1

GRAY
100 150 200

출력 1

141 141 141

예제 2

PROTAN
200 100 50

출력 2

157 156 62

예제 3

DEUTER
100 200 50

출력 3

138 130 95

힌트

첫 번째 예제에서 Y=0.299×100+0.587×150+0.114×200=140.75Y = 0.299 \times 100 + 0.587 \times 150 + 0.114 \times 200 = 140.75이므로 세 성분은 모두 141141이 된다.

두 번째 예제에서 변환 전의 세 성분에 PROTAN의 식을 적용하면 (156.7,155.8,62.1)(156.7, 155.8, 62.1)을 얻고, 이를 반올림하면 (157,156,62)(157, 156, 62)가 된다.

세 번째 예제에서 변환 전의 세 성분에 DEUTER의 식을 적용하면 (137.5,130,95)(137.5, 130, 95)를 얻고, 이를 반올림하면 (138,130,95)(138, 130, 95)가 된다.

문제를 만든 사람
안우진
알고리즘 분류
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출

제출 내역이 없습니다.

맞은 사람
#순위사용자언어시간메모리코드 길이
10467🥇
멋진승주
C++1ms1620KB848B
10459🥈
상받고싶습니다
C++1ms1620KB748B
10266🥉
황현석
C++1ms1620KB399B
104884
실외기선풍기세탁기
C++1ms1620KB852B
104585
세얼간이
C++1ms1620KB615B
104856
안녕하세요케이터링먹으러왔습니다감사합니다
C++1ms1620KB825B
110097
이재준
C++1ms1620KB844B
104898
SW-IT Contest는 충남대학교 컴퓨터인공지능학부 알고리즘 동아리 ANA에서 주최하는 프로그래밍 대회로, 팀으로 출전하여 알고리즘 문제를 해결하는 대회입니다.
C++1ms1620KB942B
104719
OOOOOOOO
C++1ms1664KB737B
1046510
Kokiri is cute
C++1ms1768KB692B
1056011
Team 경덩이
Python9ms9128KB451B
1081412
메가커피
Python9ms9212KB880B
1057313
이채환여친구함
Python9ms9220KB460B
1057714
25번지 실버타운
Python9ms9392KB575B
1062615
나여
Python10ms9020KB536B
1071016
집가고싶다
Python10ms9212KB627B
1070417
요를레이히말고영크크
Python12ms9208KB568B
1069418
1+1+1=1
PyPy23ms49984KB520B
1051519
황준영
PyPy24ms49996KB747B
1064220
3학년인내가코딩을잘할수있을리없잖아무리무리!(※무리가 아니었다?!)
Java25ms37888KB1721B
1 / 2
난이도 투표
Bronze III2명 투표· 12일 전
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
#사용자문제결과언어시간메모리코드 길이제출 시간
11037
맞았습니다
Java248ms41544KB1082B2026. 10. 11. 13:30
11009
맞았습니다
C++1ms1620KB844B2026. 10. 07. 16:30
11008
틀렸습니다
C++--844B2026. 10. 07. 16:19
11007
틀렸습니다
C++--797B2026. 10. 07. 16:16
11006
틀렸습니다
C++--833B2026. 10. 07. 15:43
11005
틀렸습니다
C++--807B2026. 10. 07. 15:35