본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 2586 자동분무기(중)

by 까망 하르방 2021. 5. 16.
반응형

출처: http://www.hancom.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1847&sca=5090

Approach

 Input 

30

30 30 31 30 29 30 31 30

30 30 31 30 29 30 31 30

29 29 30 29 29 29 30 29

30 30 31 30 29 30 31 30

30 30 31 30 29 30 31 30

32 32 32 32 31 32 32 32

30 30 31 30 29 30 31 30

30 30 31 30 29 30 31 30

 

 Output 

. . . . . . . .

. . . . . . . .

. . . . - . . .

. . . . . . . .

. . . . . . . .

. . + . . . + .

. . . . . . . .

. . . . . . . .

 

모든 Case를 완전 탐색하는 경우 TLE

자동 분무기가 규칙을 이용해야 한다.

수치를 계산했을 때, 해당 지점이 비료액(+) 인지 / 제초제(-) 인지 판단해야 한다.

 

 

아래와 같이 입력받으면 행(row) / 열(col)의 수치도 같이 저장한다.

for (int i = 0; i < FARM_SIZE; ++i)
{
    for (int j = 0; j < FARM_SIZE; ++j)
    {
        scanf("%d", &farm[i][j]);
        farm[i][j] -= M; // 기본 생산량 제외
        S += farm[i][j];
        row[i] += farm[i][j];
        col[j] += farm[i][j];
    }
}

위 Input / Output Case를 표현하면 아래와 같다.

 

비료액(+) / 제초제(-) 판단

비료액(+)이 위치한 (6, 3)와 (6, 7) 수치를 계산해보자

▶ (15 + 8 - (2 * 1) / 7) - 2 = (23 - 2) / 7 - 2 

    = 3 - 2 = 1

 

제초제(-)가 위치한 (3, 5)

▶ (- 6 - 6 - (2 * 1) / 7 ) - (-1) = (- 12 - 2) / 7 + 1 

    = -2 + 1 = -1

 

위와 같은 사실을 도출하는 방식은 여기서 보여드린것과 다르게 할 수도 있다.

주어진 상황에서 수치를 분석하는 것도 개발자에게 중요한 요소이겠지만

개인적으로 선호하는 Style의 문제는 아니다.

 

알고리즘 공부 필요성 

 

알고리즘 공부 필요성

알고리즘을 공부하는 이유는 문제 해결 능력 / 논리적 사고 능력을 키우기 위함 모든 실무 프로젝트에서 고난이도 알고리즘을 알아야하고 적용되는 것은 아니다. (오픈 소스를 활용하거나 기존

zoosso.tistory.com

알고리즘을 어떻게 공부해야 될까?  

 

알고리즘을 어떻게 공부해야 될까?

알고리즘을 왜 공부해야 될까? ※ 알고리즘 공부 필요성 알고리즘 공부 필요성 알고리즘을 공부하는 이유는 문제 해결 능력 / 논리적 사고 능력을 키우기 위함 모든 실무 프로젝트에서 고난이도

zoosso.tistory.com


#include <stdio.h>
const int FARM_SIZE = 8;

int M, K, ret, S;
int farm[FARM_SIZE][FARM_SIZE], row[FARM_SIZE], col[FARM_SIZE];

void init()
{
    for (int i = 0; i < 8; ++i)
    {
        row[i] = col[i] = 0;
    }
    S = 0;
}

int main()
{
    // freopen("input.txt", "r", stdin);
    init();
    scanf("%d", &M);
    for (int i = 0; i < FARM_SIZE; ++i)
    {
        for (int j = 0; j < FARM_SIZE; ++j)
        {
            scanf("%d", &farm[i][j]);
            farm[i][j] -= M; // 기본 생산량 제외
            S += farm[i][j];
            row[i] += farm[i][j];
            col[j] += farm[i][j];
        }
    }
    S /= 15;
    for (int i = 0; i < FARM_SIZE; ++i)
    {
        for (int j = 0; j < FARM_SIZE; ++j)
        {
            ret = (row[i] + col[j] - 2 * S) / 7 - farm[i][j];
            switch (ret)
            {
            case 1:
                printf("+ ");
                break;
            case -1:
                printf("- ");
                break;
            default:
                printf(". ");
                break;
            }
        }
        printf("\n");
    }
    return 0;
}

 

반응형

'PS 문제 풀이 > Jungol' 카테고리의 다른 글

[Jungol] 정올 2601 종이접기  (0) 2021.07.21
[Jungol] 정올 2223 블랙홀  (0) 2021.04.03
[Jungol] 정올 1863 종교  (0) 2021.04.02
[Jungol] 정올 1516 단어세기  (0) 2021.03.18
[Jungol] 정올 1264 마법색종이  (0) 2021.03.18

댓글