알고리즘/백준

[파이썬, 자바] BOJ_18238(ZOAC 2)

딱따구르리 2021. 2. 2. 16:53
728x90
반응형

문제

 

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

 

18238번: ZOAC 2

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

www.acmicpc.net


 

해설

 

이 문제는 왼쪽 / 오른쪽 중 빠른 쪽의 값을 구하면 된다.

다양한 방법으로 풀 수 있지만 이번에는 아스키 코드 값을 사용해서 풀어보았다.

(A ~ Z를 리스트에 담아놓고 푸는 방법을 사용할 수도 있다)

 

대문자 아스키코드 값

 

원판을 왼쪽으로 돌릴지, 오른쪽으로 돌릴지에 따라 아스키코드 값을 계산해주면 된다.

주의할 점은,

계산한 값이 음수가 되면 알파벳 개수인 26을 더해줘야 제대로 된 값을 얻을 수 있다는 것이다.


코드

 

-파이썬

#백준 18238(ZOAC 2)

word = list(input())  #문자열

start = 'A'
time = 0

for i in word:
    left = ord(i) - ord(start)  #원판 왼쪽으로 돌리기
    right = ord(start) - ord(i)  #오른쪽으로 돌리기

    if left < 0:
        left += 26
    elif right < 0:
        right += 26

    time += min(left, right)
    start = i

print(time)

 

-자바

//백준 18238(ZOAC 2)
import java.util.*;
import java.io.*;

public class Boj_18238 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String word = br.readLine();
        
        char start = 'A';
        int time = 0;
        
        for(int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            int temp = Math.abs(c - start);
            time += Math.min(temp, 26 - temp);  //왼쪽으로 돌리는 것, 오른쪽으로 돌리는 것 중 최소
            start = c;
        }
        bw.write(time + "\n");

        bw.flush();
        br.close();
        bw.close();
	}

}
728x90
반응형