본문 바로가기
모각코

[2020여름] 모각코 2회차 활동

by seungh2 2020. 7. 8.

백준 알고리즘 17176번!!

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

 

17176번: 암호해독기

방금 도착한 암호문을 해독했는데, 해독에 오류가 없는지 확인해보려 한다. 해독한 문장이 암호문을 해석한 결과로 나올 수 없다면, 그 해독은 잘못된 것이다. 암호문은 0 이상 52 이하의 정수로

www.acmicpc.net

 

17176번 문제

주어진 수만큼의 숫자들로 주어진 평문을 만들 수 있으면 y를 아니면 n을 출력한다.

이 때 0은 띄어쓰기, 1-26은 A-Z, 27-52는 a-z이다.

 

입력

첫 번째 줄에는 주어질 수열의 길이 N이 주어진다. (1 ≤ N ≤ 100,000)

두 번째 줄에는 암호문에 해당하는 수 N개가 띄어쓰기와 함께 주어진다.

세 번째 줄에는 평문이 주어진다. 단, 평문의 길이는 N과 같으며, 띄어쓰기로 시작하거나 끝나지 않는다.

 

문제해결

입력이 위에처럼 3줄로 들어오기 때문에

처음에는 nextInt()와 nextLine()을 사용하려고 했는데 nextInt()를 하고나서 nextLine()으로 두 번째 줄을 읽어내지 못해서

for문을 3번 돌려서 nextLine()으로 받아서 형변환해주었다.

// 입력 3줄을 nextLine()으로 각각 받아서 input 배열에 순서대로 저장
Scanner sc = new Scanner(System.in);
		
String[] input = new String[3];
for (int i = 0; i < 3; i++) {
	input[i] = sc.nextLine();
}
	

input[0]에는 주어질 수열의 길이 N이 문자열형으로 저장되어 있다.

input[1]에는 암호문에 해당하는 수 N개가 순서대로 있는 문자열이 저장되어 있다.

input[2]에는 평문에 해당하는 문자열이 저장되어 있다.

 

 

int num = Integer.parseInt(input[0]);
		
int[] incode = new int[num];

String[] strArr = input[1].split(" ");

for (int i = 0; i < strArr.length; i++) {
	incode[i] = Integer.parseInt(strArr[i]);
}

input[0]을 parseInt를 사용하여 int형으로 변환해서 num에 저장한다.

 

input[1]을 split(" ")을 사용하여 공백을 기준으로 N개의 숫자를 구해서 strArr 배열에 저장해준다.

input[0]과 마찬가지로 strArr의 원소들을 int형으로 변환해서 incode 배열에 저장한다.

 

 

int[] numArr = new int[num] ;
		
for(int i = 0; i < input[2].length(); i++) {
	if(input[2].charAt(i) == ' ') {
		numArr[i] = 0;
	}
			
	if(65 <= input[2].charAt(i) && input[2].charAt(i) <= 90) {
		numArr[i] = input[2].charAt(i) - 64;
	}
			
	if(97 <= input[2].charAt(i) && input[2].charAt(i) <= 122) {
		numArr[i] = input[2].charAt(i) - 70;
	}
}

input[2]의 문자열의 길이만큼 for문을 돌린다.

이때 input[2] 문자열에서 문자를 하나씩 보면서

띄어쓰기면 numArr의 그 index에 0을 넣고

대문자면 아스키코드 값에서 - 64 한 값을 넣고 소문자면 아스키코드 값에서 - 70한 값을 넣는다.

 

incode 배열과 numArr 배열을 정렬한 후 같은지 비교한다.

이때 Arrays.sort와 Arrays.equals를 사용한다.

 

같으면 y를 그렇지 않으면 n을 출력한다.

 

전체 코드

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		String[] input = new String[3];
		for (int i = 0; i < 3; i++) {
			input[i] = sc.nextLine();
		}
		int num = Integer.parseInt(input[0]);
		
		int[] incode = new int[num];

		String[] strArr = input[1].split(" ");

		for (int i = 0; i < strArr.length; i++) {
			incode[i] = Integer.parseInt(strArr[i]);
		}

		int[] numArr = new int[num] ;
		
		for(int i = 0; i < input[2].length(); i++) {
			if(input[2].charAt(i) == ' ') {
				numArr[i] = 0;
			}
			
			if(65 <= input[2].charAt(i) && input[2].charAt(i) <= 90) {
				numArr[i] = input[2].charAt(i) - 64;
			}
			
			if(97 <= input[2].charAt(i) && input[2].charAt(i) <= 122) {
				numArr[i] = input[2].charAt(i) - 70;
			}
		}
		
		Arrays.sort(incode);
		Arrays.sort(numArr);
		
		if(Arrays.equals(incode, numArr)) {
			System.out.println("y");
		}else {
			System.out.println("n");
		}
		

	}

}

 

성공!!

저 컴파일에러...

class 가 public인데 class 이름이랑 .java이름이랑 다르다고 났다..

그래서 class 이름을 Decode에서 Main으로 바꿨더니 바로 성공으로...ㅠㅡㅠ 

다음부턴 조심해야지!!!!

728x90

댓글