본문 바로가기
SWE/코테

[성실코딩 4일차] 백준 #3048 개미

by S나라라2 2018. 10. 18.
반응형

난이도는 쉬웠음


내가 별로 좋아하지 않는 유형의 문제. 시뮬레이션?으로 분류하나?


딱히 머리 안쓰고 그냥 구현만 하면 되는데 나는 꼭 이런 문제에서 패턴, 규칙성 찾으려하고, 더 효율적으로 푸는 방법 찾다가 

문제 더 어렵게 풀거나 못품 ㅜㅜ 

이런 유형 나에게 너무 어려움 ㅜㅜ 조금 포기하고 노가다로 걍 하면 되는데!!!!!!!! 


#include<iostream>

using namespace std;

int	alpha[26];  // alpha ascii 65~90
// 알파벳의 방향 표시 
// +1 : 왼쪽 -> 오른쪽 방향
// -1 : 오른쪽 -> 왼쪽 방향
//
//알파벳이 점프할 수 있는지 표시
// +2 : 오른쪽 원소와 swap
// -2 : 왼쪽 원소와 swap

int n1, n2;
char group[26]; 

int main(void) {

	// 입력받기
	cin >> n1 >> n2;
	for (int i = n1-1; i>-1; i--) {
		char temp;
		cin >> temp;
		group[i] = temp;
		alpha[temp - 65] = 1; // 오른쪽 -> 왼쪽
	}
	for (int i = n1; i < n1 + n2; i++) {
		char temp;
		cin >> temp;
		group[i] = temp;
		alpha[temp - 65] = -1; // 왼쪽 ->오른쪽
	}
	
	int Tsec;
	cin >> Tsec;

	// Tsec만큼 실행하기
	for (int i = 0; i < Tsec; i++) {
		// 1. 반대방향으로 움직이는 원소 찾아서 swap(점프) 표시해주기
		for (int j = 0; j < n1 + n2-1; j++) {
			// 반대 방향으로 움직인다면
			if (alpha[group[j] - 65]==1 && alpha[group[j+1]-65]==-1 )
			{
				// swap 해야하는 원소 표시하기
				alpha[group[j] - 65] = alpha[group[j] - 65]<<1;
				alpha[group[j+1] - 65] = alpha[group[j+1] - 65]<<1;
			}
		}
		// 2. swap(점프) 해주기
		for (int j = 0; j < n1 + n2-1; j++) {
			if (alpha[group[j] - 65]==2 && alpha[group[j+1]-65]==-2) { // 오른쪽과 변경
				//grop swap
				char temp = group[j];
				group[j] = group[j + 1];
				group[j + 1] = temp;
				// 초기화
				alpha[group[j] - 65] = alpha[group[j] - 65]>>1;
				alpha[group[j+1] - 65] = alpha[group[j+1] - 65]>>1;
			}
		}
	}

	// 결과 출력
	for (int i = 0; i < n1 + n2; i++) {
		cout << group[i];
	}

	return 0;
}
반응형