Java/Java 알고리즘

백준 3285번 DECODE JAVA 구현해보기

kimc 2021. 12. 26. 12:07

```

백준 3285번 DECODE JAVA 구현해보기

```

이번 글을 통해 배워갈 내용

  1.  백준 3285번 풀이

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

 

3285번: DECODE

The first and only line of output file should contain decoded, i.e. original text.

www.acmicpc.net

 

 

 

백준 3285번 DECODE는

난이도 쉬움 등급의 문제로서

 

알파벳 대문자 A 부터 Z로 이루어진 키워드

1부터 26중 하나로 만들어진 키 숫자

알파벳 대문자 A부터 Z로 이루어진 디코드 할 문자열이 주어질 때

 

키워드를 알파벳 26자에서 제외시킨 다음

키워드 + 남은 알파벳을 키 숫자 다음부터 출력된 문자열이 주어질 때

 

원래 문자열을 출력하면 되는 문제입니다.

 

 

예를 들어서

키워드

키 숫자

디코드 할 문자열

을 받았을 때

 

ILOVEPC

15

SDJFSFASFA

 

아래와 같은 테이블이 생성되고

ABCDEFGHIJKLMNOPQRSTUVWXYZ

HJKMNQRSTUWXYZILOVEPCABDFG

 

답은 

HXBYHYVHYV

이 출력됩니다.


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

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


 

간단하게 Deque를 사용해서

키워드를 제외한 알파벳을 Deque에 넣고

키워드를 Deque 맨 앞에 넣은 다음

 

키 숫자부터 시작해서 Deque에서 순서대로 뺀 알파벳을 CodeText라는 임의의 변수에 넣습니다.

그다음 CodeText를 사용해서 해당되는 인덱스에 매칭 되는 알파벳을 가지고

주어진 문자열을 해독해주면 됩니다.

 

 

 

 

import com.sun.jdi.CharValue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;

public class Main {

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

        String keyWord = br.readLine();
        int keyNum = Integer.parseInt(br.readLine());
        char[] codedTextArr = br.readLine().toCharArray();

        final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        Deque deque = new ArrayDeque();

        for (int i=0;i<26;i++){
            final char tempChar = (char) ('A' + i);
            if(!keyWord.contains(String.valueOf(tempChar))){
                deque.add(tempChar);
            }
        }

        for (int i=keyWord.length()-1;i>=0;i--){
            deque.addFirst(keyWord.charAt(i));
        }


        //  더하기
        String codeStr = "";
        for(int i=0;i<26-keyNum+1;i++){
            codeStr += deque.pop();
        }
        while (!deque.isEmpty()){
            codeStr = deque.removeLast() + codeStr;
        }

        for(char ch : codedTextArr){
            System.out.print((char)(codeStr.indexOf(ch) + 'A'));;
        }


    }
}

 

읽어주셔서 감사합니다

 

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

 

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

 


 

728x90