Algorithm/백준 알고리즘

백준_3048 개미(자바) / 문자열

미스터로즈 2021. 11. 2. 09:26

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Back_3048 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N1 = Integer.parseInt(st.nextToken());
		int N2 = Integer.parseInt(st.nextToken());
		
		String t1=br.readLine();
		char[] tmp1 = new char[N1];
		for (int i = 0; i < N1; i++) {
			tmp1[i]=t1.charAt(N1-i-1);
		}
		
		char[] tmp2 = br.readLine().toCharArray();
		
		char ants[]= new char[N1+N2];
		int dir[] = new int[N1+N2];
		for(int i = 0 ; i < N1;i++) {
			ants[i]=tmp1[i];
			dir[i]=1;
		}
		for (int i = N1; i < N1+N2; i++) {
			ants[i]=tmp2[i-N1];
			dir[i]=2;
		}
		int T = Integer.parseInt(br.readLine());
		while(T>0) {
			T--;
			for (int i = 0; i < N1+N2-1; i++) {
				if(dir[i]==1&&dir[i+1]==2) {
					char t = ants[i];
					ants[i]=ants[i+1];
					ants[i+1]=t;
					int td = dir[i];
					dir[i]=dir[i+1];
					dir[i+1]=td;
					i++;
				}
			}
		}
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < N1+N2; i++) {
			sb.append(ants[i]);
		}
		System.out.println(sb);
	}

}

 

※ 내 생각

이 문제는 문자열을 이용하는 문제입니다.

각각의 문자열을 배열에 담아줍니다.
이동하는 횟수 만큼 While를 돌려서 위치를 바꿔줍니다.
바꾸는 과정에서는 SWAP을 이용해서 위치를 바꿨습니다.
이동하는 방향을 정방향은 1 반대 방향은 2로 했으며,
스왑이 되면 다시 바뀌지 않게 방향을 바꿔줘야합니다.