백준 알고리즘 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으로 바꿨더니 바로 성공으로...ㅠㅡㅠ
다음부턴 조심해야지!!!!
'모각코' 카테고리의 다른 글
[2020여름] 모각코 3회차 활동 (0) | 2020.07.14 |
---|---|
[2020여름] 모각코 3회차 계획 (0) | 2020.07.13 |
[2020여름] 모각코 2회차 계획 (0) | 2020.07.08 |
[2020여름]모각코 1회차 활동 (0) | 2020.07.07 |
[2020여름] 모각코 1회차 계획 (0) | 2020.07.06 |
댓글