[백준] 11655번 ROT13 JAVA (자바) 풀이
문제 11655번
: ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다
[입력]
: 첫째 줄에 문자열 S (알파벳 대문자, 소문자, 공백, 숫자 포함)
[출력]
: 첫째 줄에 S를 ROT13으로 암호화한 내용을 출력
[코드]
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
for(int i = 0; i<s.length(); i++){
char c = s.charAt(i);
if(c>='A'&& c<='Z'){
c+=13;
if(c>'Z'){
c-=26;
}
}
else if(c>='a'&& c<='z'){
c+=13;
if(c>'z'){
c-=26;
}
}
System.out.print(c);
}
}
}
[해설]
: String s = br.readLine(); 첫째줄 입력받기
: char c = s.charAt(i); 하나씩 뜯어보기
: if(c>='A'&& c<='Z'){ 입력이 대문자일 때
c+=13; 대문자 문자열에만 13칸 만큼 뒤로 미뤄준다
if(c>'Z') 단, 알파벳 + 13 했을 때 Z가 넘어간다면 알파벳이 아닌 다른 문자로 인식되므로
c-=26; - 26해서 A ~ Z 사이에서만 돌아가게끔 반복해준다
} (알파벳 개수가 26개니까 Z를 넘어가면 다시 A로 가서 돌게끔 - 26 한 것)
: else if(c>='a'&& c<='z'){ 입력이 소문자일 때
c+=13; 소문자 문자열에만 13칸 만큼 뒤로 미뤄준다
if(c>'z'){ 단, 알파벳 + 13 했을 때 z가 넘어간다면 알파벳이 아닌 다른 문자로 인식됨
c-=26; - 26해서 a ~ z 사이에서만 돌아가게끔 반복해준다
} (알파벳 개수가 26개니까 z를 넘어가면 다시 a로 가서 돌게끔 - 26 한 것)
: System.out.print(c); c 출력 (*주의 : for문 안에 넣어야 돌아간다)
대문자랑 소문자만 c를 새롭게 갱신해준 것
숫자나 공백은 입력받은 c 그대로 출력되니까 따로 코드를 짤 필요 없다
이제 풀어보러 갈께요 :)
https://www.acmicpc.net/problem/11655
11655번: ROT13
첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.
www.acmicpc.net
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *