Java/Java 알고리즘

백준 18238번 ZOAC 2 JAVA 구현해보기

kimc 2022. 8. 28. 07:53

```

백준 18238번 ZOAC 2 JAVA 구현해보기

```

이번 글을 통해 배워갈 내용

  1. 백준 18238번 풀이

https://www.acmicpc.net/problem/18238

 

18238번: ZOAC 2

2019년 12월, 두 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 작년 ZOAC의 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해

www.acmicpc.net

 

백준 18238번 ZOAC2는

난이도 브론즈 등급의 문제로서

 

A부터 Z까지 순서대로 쓰여있는 원판을

왼쪽 혹은 오른쪽으로 돌릴수있고

한 칸 돌릴 때마다 1초 소요되고

첫 문자가 A일 때

문자열이 주어지면 해당되는 문자열을 전부 원판을 돌려서 순서대로 출력하려면 

몇 초가 걸리는지 찾아주면 되는 문제입니다.

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


요즘 드는 생각이 다루기 쉽고 짧으며 유지보수가 쉬운 코드라면

조금 성능이 떨어져도 될까?입니다

아래와 같이 max min 중 하나만 써도 되는 것을 굳이 각각 따로 한 것은 그런 맥락입니다.

 

오른쪽에 있는 알파벳 왼쪽에 있는 알파벳을 구하고

작은 수 기준 왼쪽으로부터 찾을 수 있는 거리,

오른쪽으로부터 찾을 수 있는 거리를 구해주고

최솟값을 찾아서 더해주고 출력합니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.stream.IntStream;

public class Main {

    public static void main(String[] args) throws IOException {
        // 입력
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        final String input = "A" + br.readLine();

        // 출력
        final int result = IntStream.range(1, input.length()).map(i -> {
            int rhs = Math.max(input.charAt(i), input.charAt(i - 1));
            int lhs = Math.min(input.charAt(i), input.charAt(i - 1));
            final int lDis = rhs - lhs;
            final int rDis = 'Z' - rhs + lhs - 'A' + 1;
            return Math.min(lDis, rDis);
        }).sum();

        System.out.print(result);
    }
}

// https://codemasterkimc.tistory.com

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

728x90