본문 바로가기
백준

백준 3048번 : 개미

by Huiyeong 2021. 3. 5.

 문제

www.acmicpc.net/problem/3048

3048 개미

 

 구현 방법

 값과 방향을 가진 개미 클래스를 생성하고 이 클래스를 타입으로 가지는 리스트도 생성해주었습니다.

첫 번째 그룹과 두 번째 그룹의 개미수가 주어져있기 때문에 첫 번째 그룹은 'L' 방향으로 거꾸로 추가, 두 번째 그룹은 'R' 방향으로 각각 리스트에 추가한 후

T시간만큼 반복문을 돌려 리스트의 처음부터 끝까지 탐색을 시작했습니다.

다음 방향을 확인하여 현재 방향이랑 다르면 swap 

 

하지만 맞을거라는 제 예상과는 다르게 틀렸습니다... 이유가 뭘까요

한참 생각을 해보니 방향이 다를때마다 swap을 해주는게 아니라 개미는 각자의 방향으로 움직이다가 다른 방향을 만나면 점프를 해주는거였습니다.

저의 알고리즘대로 코드를 구현하게 되면 오른쪽에서 왼쪽으로 움직이던 개미가 맨 처음 인덱스에 도달했을 때 더 이상 갈 곳은 없어 멈춰야하지만 바로 다음 개미의 방향이 다르다면 바꾸게 해주었던것이 문제였습니다..!!!!!

저는 왼쪽에서 오른쪽으로 이동을 하였기 때문에 비교 대상을 왼쪽에서 오른쪽으로 이동하는 개미들만으로 줄여주었습니다.

 

 구현 코드

package BOJ.Silver;

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

public class B3048_개미 {
	static class ant {
		char data;
		int dir;

		public ant(char data, int dir) {
			super();
			this.data = data;
			this.dir = dir;
		}
	}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		int N1 = Integer.parseInt(st.nextToken());
		int N2 = Integer.parseInt(st.nextToken());
		int size = N1+N2;
		List<ant> list = new ArrayList<>();
		String word1 = br.readLine();
		for (int i=N1-1;i>=0;i--) {
			list.add(new ant(word1.charAt(i), 0));
		}
		String word2 = br.readLine();
		for (int i=0;i<N2;i++) {
			list.add(new ant(word2.charAt(i), 1));
		}
		int T = Integer.parseInt(br.readLine());
		// 입력완료
		
		for (int t=0;t<T;t++) {
			for (int i=0;i<size-1;i++) {
				if (list.get(i).dir==0 && list.get(i).dir!=list.get(i+1).dir) { // 다음 개미가 나랑 방향 다르면 바꿔줌
					char data = list.get(i).data;
					int dir = list.get(i).dir;
					list.get(i).data = list.get(i+1).data;
					list.get(i).dir = list.get(i+1).dir;
					list.get(i+1).data = data;
					list.get(i+1).dir = dir;
					i++;
				} 
			}
		}
		for (int i=0;i<list.size();i++) {
			sb.append(list.get(i).data);
		}
		System.out.println(sb);
	}
}

 

성공!

'백준' 카테고리의 다른 글

백준 1541번 : 잃어버린 괄호  (0) 2021.03.05
백준 1449번 : 수리공 항승  (0) 2021.03.05
백준 14889번 : 스타트와 링크  (0) 2021.03.05
백준 1972번 : 놀라운 문자열  (0) 2021.03.05
백준 13901번 : 로봇  (1) 2021.03.05