λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 2615번 - 였λͺ©

by μ•ˆμ£Όν˜• 2022. 9. 15.

문제

 

2615번: 였λͺ©

였λͺ©μ€ λ°”λ‘‘νŒμ— 검은 λ°”λ‘‘μ•Œκ³Ό 흰 λ°”λ‘‘μ•Œμ„ κ΅λŒ€λ‘œ λ†“μ•„μ„œ κ²¨λ£¨λŠ” κ²Œμž„μ΄λ‹€. λ°”λ‘‘νŒμ—λŠ” 19개의 κ°€λ‘œμ€„κ³Ό 19개의 μ„Έλ‘œμ€„μ΄ κ·Έλ €μ Έ μžˆλŠ”λ° κ°€λ‘œμ€„μ€ μœ„μ—μ„œλΆ€ν„° μ•„λž˜λ‘œ 1번, 2번, ... ,19번의 번호

www.acmicpc.net

 

μ½”λ“œ

#include <iostream>
#include <vector>

using namespace std;

int N = 19;
int map[19][19];
vector<pair<int,int>> coor;

/*
 ν•˜λ‹¨, 우츑, μš°μƒλ‹¨, μš°ν•˜λ‹¨
 */

bool check(pair<int,int> _coor){  // ν•˜λ‹¨
    int r = _coor.first;
    int c = _coor.second;
    
    if(r <= 14 && map[r][c] != map[r-1][c]){    //  ν•˜λ‹¨
        int cnt = 1;
        for(int i=r+1; i<r+1+4; i++){
            if(map[r][c] == map[i][c]) cnt++;
        }
        if(cnt == 5 && map[r+5][c] != map[r][c]) return true;	// 윑λͺ©μ΄ 아닐 λ•Œ
    }
    
    if(c <= 14 && map[r][c] != map[r][c-1]){    // 우츑
        int cnt = 1;
        for(int i=c+1; i<c+1+4; i++){
            if(map[r][c] == map[r][i]) cnt++;
        }
        if(cnt == 5 && map[r][c+5] != map[r][c]) return true;	// 윑λͺ©μ΄ 아닐 λ•Œ
    }
    
    if(c <= 14 && r <= 14 && map[r+1][c-1] != map[r][c]){    // 우 상단
        int cnt = 1;
        int _r = r-1;
        for(int i=c+1; i<c+1+4; i++){
            if(map[r][c] == map[_r][i]) cnt++;
            _r--;
        }
        if(cnt == 5 && map[r-5][c+5] != map[r][c]) return true;	// 윑λͺ©μ΄ 아닐 λ•Œ
    }
    
    if(c <= 14 && r <= 14 && map[r][c] != map[r-1][c-1]){    // 우 ν•˜λ‹¨
        int cnt = 1;
        int _r = r+1;
        for(int i=c+1; i<c+1+4; i++){
            if(map[r][c] == map[_r][i]) cnt++;
            _r++;
        }
        if(cnt == 5 && map[r+5][c+5] != map[r][c]) return true;	// 윑λͺ©μ΄ 아닐 λ•Œ
    }
    return false;
}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    for(int i=0; i<N; i++){
        for(int k=0; k<N; k++){
            cin>>map[i][k];
            if(map[i][k] != 0) coor.push_back({i, k});
        }
    }
    
    for(auto it: coor){
        if(check(it)){
            cout<< map[it.first][it.second] << '\n';
            cout<<it.first + 1 << ' '<<it.second + 1;
            return 0;
        }
    }
    cout<<0;
    
}

 

풀이

λ‹¨μˆœνžˆ κ΅¬ν˜„ν•˜λŠ” λ¬Έμ œμ§€λ§Œ 윑λͺ©κ³Όκ°™μ€ μ—£μ§€μΌ€μ΄μŠ€λ₯Ό 잘 μ²˜λ¦¬ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μΌ€μ΄μŠ€λŠ” μ•„λž˜ 링크에 λ°˜λ‘€λ₯Ό 올렀 μ£Όμ‹  뢄이 κ³„μ‹œλ‹ˆ ν™œμš©ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

https://www.acmicpc.net/board/view/83278

였λͺ© μ•Œμ΄ 놓인 μ’Œν‘œλ₯Ό 기얡해놓고, ν•΄λ‹Ή μ’Œν‘œλ“€μ˜ ν•˜λ‹¨, 우츑, μš°μƒλ‹¨, μš°ν•˜λ‹¨ 츑을 μ°Ύμ•„μ„œ 였λͺ©μ΄ λ§Œλ“€μ–΄μ§€λŠ”μ§€ κ²€μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€.

였λͺ© μ•Œμ„ 배열상 μˆœμ„œλŒ€λ‘œ νƒμƒ‰ν•˜κΈ° λ•Œλ¬Έμ— μ’ŒμΈ‘μ€ 탐색할 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

λŒ“κΈ€