N

(SWEA c++)1220. [S/W 문제해결 기본] 5일차 - Magnetic 본문

SW Expert Academy

(SWEA c++)1220. [S/W 문제해결 기본] 5일차 - Magnetic

naeunchan 2020. 10. 12. 10:27
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14hwZqABsCFAYD&categoryId=AV14hwZqABsCFAYD&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

배열의 맨 밑에서부터 검사를 한다.

행 단위로 움직이도록 한다.

(바깥 for문 = j, 안쪽 for문 = i)

bool형 n, s를 이용해 교착 상태를 확인한다.

arr[i][j] == 1이면 N극, 2이면 S극이므로

각각의 상태를 확인한다.

 

N극인 경우)

1)n과 s가 false인 경우 테이블 밖으로 떨어진다.

2)n == true && s == false인 경우 자성체가 붙어있지만 N극인 경우이므로 continue

3)n == false && s == true인 경우 S극 자성체가 있어 교착상태이므로 ans++, n, s를 모두 false로 바꿔준다.

 

S극인 경우)

1)n == false, s == false인 경우 n,s 자성체가 발견되지 않으므로 s = true

2)s == true && n == false인 경우 s극끼리 붙어있으므로 continue

3)s == false && n == true인 경우 교착상태이므로 ans++, n, s를 모두 false로 바꿔준다.

#include <iostream>

using namespace std;

int arr[100][100];

int main(void)
{
    for(int t = 1; t <= 10; t++)
    {
        int n, ans = 0;
        cin >> n;
        
        for(int i = 0; i < 100; i++)
        {
            for(int j = 0; j < 100; j++)
                cin >> arr[i][j];
        }
        
        for(int j = 0; j < 100; j++)
        {
            bool n = false, s = false;
            
            for(int i = 99; i >= 0; i--)
            {
                if(arr[i][j] == 1)
                {
                    if((!n && !s) || (n && !s))
                        continue;
                    else if(!n && s)
                    {
                        ans++;
                        n = false;
                        s = false;
                    }
                }
                else if(arr[i][j] == 2)
                {
                    if(!n && !s)
                       s = true;
                    else if(s && !n)
                        continue;
                    else if(!s && n)
                    {
                        ans++;
                        n = false;
                        s = false;
                    }
                }
            }
        }
        cout << "#" << t << " " << ans << endl;
    }
    return 0;
}
728x90
반응형