본문 바로가기
코드포스/div3

B2. Wonderful Coloring - 2

by kcj3054 2021. 8. 5.

문제 설명

  • each element of the sequence is either painted in one of k colors or isn't painted;
  • each two elements which are painted in the same color are different (i. e. there's no two equal values painted in the same color);
  • let's calculate for each of k colors the number of elements painted in the color — all calculated numbers must be equal;
  • the total number of painted elements of the sequence is the maximum among all colorings of the sequence which meet the first three conditions.

n과 k가 주어지는데 n개의 숫자, 그리고 각 숫자는 k개를 초과하면 안된다
0을 제외하고는 1 ~ k개가 동일하게 카운팅 되어야한다

틀린 이유 :

어떻게 동일 숫자로 각 숫자들을 돌려야할까에서 막혔다.

풀이설명 :

  1. n개의 값을 받는다
  2. 해당 숫자들을 카운팅해준다 -> 0을 제외하고 동일하게 카운트하기 위해서다
  3. 해당숫자가 k개가 넘으면 안된다
  4. 헤아린 카운트가 k의 배수가 안되면 나머지 값을 전체에서 빼주면 된다
  5. 값을 배분해줄때 임의의 변수 kNum을 사용해서 1 ~ k를 배분할때 (kNum + 1) % k를 해주었다 그래야지 0이안된다
    ex : k가 3이다 , kNum이 3일경우 %로 바로 하면 0이된다
    kNum = (kNum  + 1)% k;

핵심 코드

for (int i = 0; i < m.size(); ++i) {
            for (int j = 0; j < m[i].size(); j++) {
                if (cnt == 0) break;
                cnt--;
                ans[m[i][j]] = kNum + 1;
                kNum = (kNum  + 1)% k;
            }
        }

'코드포스 > div3' 카테고리의 다른 글

B. Alphabetical Strings  (0) 2021.08.09
A. Shortest Path with Obstacle  (0) 2021.08.09
B1.WonderfulColoring  (2) 2021.07.29