반응형
난이도는 쉬웠음
내가 별로 좋아하지 않는 유형의 문제. 시뮬레이션?으로 분류하나?
딱히 머리 안쓰고 그냥 구현만 하면 되는데 나는 꼭 이런 문제에서 패턴, 규칙성 찾으려하고, 더 효율적으로 푸는 방법 찾다가
문제 더 어렵게 풀거나 못품 ㅜㅜ
이런 유형 나에게 너무 어려움 ㅜㅜ 조금 포기하고 노가다로 걍 하면 되는데!!!!!!!!
#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; }
반응형