Machineboy空

A074:オリオン座 본문

Computer/Coding Test

A074:オリオン座

안녕도라 2025. 5. 16. 12:04

문제요약

https://paiza.jp/works/challenges/644/retry?tk=95552e7eb82f619d97d816c368d5b734

 

ログイン

ログイン画面です。|ITエンジニア・プログラマ向け総合求職・学習サイト【paiza】

paiza.jp

 


난이도

A Rank


풀이 포인트

  • 배열 인덱스

REVIEW

 

왜 틀렸지.. 10개 테스트 케이스중 한 4개가 틀린다.

디버깅 중

 


CODE

using System;
using System.Linq;

class Program
{
static char\[,] sky;
static int h, w;

```
static void Main()
{
    var hw = Console.ReadLine().Split().Select(int.Parse).ToArray();
    h = hw[0];
    w = hw[1];
    sky = new char[h, w];

    for (int i = 0; i < h; i++)
    {
        var line = Console.ReadLine();
        for (int j = 0; j < w; j++)
            sky[i, j] = line[j];
    }

    int answer = 0;

    for (int i = 1; i < h-1; i++)
    {
        for (int j = 1; j < w - 3; j++)
        {
            // 중앙의 가로 3개의 별이 존재하는지 확인
            if (sky[i, j] == '*' && sky[i, j + 1] == '*' && sky[i, j + 2] == '*')
            {
                answer += CountOrion(i, j);
            }
        }
    }

    Console.WriteLine(answer);
}

static int CountOrion(int i, int j)
{
    int count = 1;

    // 좌상 (i보다 위, j보다 왼쪽)
    int upperLeft = 0;
    for (int x = 0; x < i; x++)
        for (int y = 0; y < j; y++)
            if (sky[x, y] == '*') upperLeft++;

    // 우상 (i보다 위, j+3보다 오른쪽)
    int upperRight = 0;
    for (int x = 0; x < i; x++)
        for (int y = j + 3; y < w; y++)
            if (sky[x, y] == '*') upperRight++;

    // 좌하 (i보다 아래, j보다 왼쪽)
    int lowerLeft = 0;
    for (int x = i + 1; x < h; x++)
        for (int y = 0; y < j; y++)
            if (sky[x, y] == '*') lowerLeft++;

    // 우하 (i보다 아래, j+3보다 오른쪽)
    int lowerRight = 0;
    for (int x = i + 1; x < h; x++)
        for (int y = j + 3; y < w; y++)
            if (sky[x, y] == '*') lowerRight++;

    count *= upperLeft;
    count *= upperRight;
    count *= lowerLeft;
    count *= lowerRight;

    return count;
}