본문 바로가기

알고리즘(백준 등) 공부

SWEA 26389. 여행

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

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

swexpertacademy.com

 

이동하는 방향이 주어질 때, 원하는 만큼 방향대로 이동하여 원점으로 돌아올 수 있는지 확인하여 갈 수 있다면 Yes, 불가능하면 No를 출력하는 문제이다. 방향만 주어지고 원하는 만큼만 이동하므로 한 쪽 방향 이동이 있으면 반대 방향 이동이 있기만 한다면 무조건 돌아올 수 있다. 즉, 양쪽 다 안 가거나 양쪽 다 한 번 이상 가는 경우를 제외하고는 원점으로 돌아올 수 없다.

 

이를 확인하기 위해 boolean으로 각 방향이 한 번이라도 가는지 확인하였다.

boolean e = false, w = false, s = false, n = false;
for(int i=0; i<line.length(); i++) {
    if(line.charAt(i) == 'E') e = true;
    else if(line.charAt(i) == 'W') w = true;
    else if(line.charAt(i) == 'S') s = true;
    else n = true;
}
if((e && !w) || (w && !e) || (s && !n ) || (n && !s)) {
    sb.append("No");
} else sb.append("Yes");
sb.append("\n");

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int tc = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		for(int test_case=0; test_case<tc; test_case++) {
			String line = br.readLine();
			boolean e = false, w = false, s = false, n = false;
			for(int i=0; i<line.length(); i++) {
				if(line.charAt(i) == 'E') e = true;
				else if(line.charAt(i) == 'W') w = true;
				else if(line.charAt(i) == 'S') s = true;
				else n = true;
			}
			if((e && !w) || (w && !e) || (s && !n ) || (n && !s)) {
				sb.append("No");
			} else sb.append("Yes");
			sb.append("\n");
		}
		br.close();
		System.out.print(sb);
	}
}

'알고리즘(백준 등) 공부' 카테고리의 다른 글

SWEA 25695. 세 정수  (0) 2026.04.09
SWEA 25837. 합과 곱  (0) 2026.04.08
SWEA 25838. 여우 줄이기  (0) 2026.04.07
SWEA 26011. 정수들의 합  (0) 2026.04.05
SWEA 26390. 트리 바꾸기  (0) 2026.04.03