2024. 11. 8. 18:00ㆍ입문문제
https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.
예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다.
문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
입출력 예
| s | n | result |
| "AB" | 1 | "BC" |
| "z" | 1 | "a" |
| "a B z" | 4 | "e F d" |
알파벳과 공백으로 구성된 문자열이 주어졌을 때, 이 문자열의 시저 암호를 반환하는 문제입니다.
A-Z일 때는 밀더라도 항상 A-Z, a-z도 밀더라도 항상 a-z입니다.
이렇게 빙빙 회전하는 문제라면 우리는 % 기호를 사용하여 나머지를 기준으로 값을 사용하면 됩니다.
또한, 문제의 의도는 아마 반복문을 사용해서 시저 암호를 생성하는 것 같습니다.
반복문으로 하나씩 가져온 뒤, 대소문자/공백 규칙에 맞게 값을 재입력해주면 되겠네요.
정답 코드를 작성해보겠습니다.
1. 자바
class Solution {
public String solution(String s, int n) {
String answer = "";
// advanced for문을 사용합니다.
for (char c: s.toCharArray()) {
// c가 대문자라면
if (c >= 'A' && c <= 'Z') {
answer += (char) ((c - 'A' + n) % 26 + 'A');
}
// c가 소문자라면
else if (c >= 'a' && c <= 'z') {
answer += (char) ((c - 'a' + n) % 26 + 'a');
}
// c가 공백이라면
else {
answer += c;
}
}
return answer;
}
}
2. 파이썬
def solution(s, n):
answer = ''
# s의 문자를 k로 하나씩 가져옵니다.
for k in s:
# 만약 k가 대문자라면
if k >= 'A' and k <= 'Z':
answer += chr(((ord(k) + n - ord('A')) % 26) + ord('A'))
# 만약 k가 소문자라면
elif k >= 'a' and k <= 'z':
answer += chr(((ord(k) + n - ord('a')) % 26) + ord('a'))
# 만약 k가 공백이라면
else:
answer += k
# 시저 암호를 반환합니다.
return answer
간단하게 요약하자면
1. 반복문으로 문자를 하나씩 가져온다.
2. 해당 문자가 대문자인지, 소문자인지, 공백인지 판단한다.
3. 각각의 경우에 따라 가공을 한 뒤 문자열에 더해준다.
이렇다고 볼 수 있습니다.
'입문문제' 카테고리의 다른 글
| [연습문제] 이상한 문자 만들기 (0) | 2024.11.12 |
|---|---|
| [연습문제] 약수의 합 (0) | 2024.11.11 |
| [연습문제] 문자열을 정수로 바꾸기 (0) | 2024.11.07 |
| [연습문제] 수박수박수박수박수박수? (0) | 2024.11.06 |
| [연습문제] 소수 찾기 (0) | 2024.11.05 |