반응형
해당 글에서는 제공받은 문자열을 기반으로 회전수(rotation) 값에 따라 각각 문자를 왼쪽으로 이동하거나 오른쪽으로 이동하는 방법에 대해 알아봅니다.
1) 소문자의 왼쪽/오른쪽 회전(이동) 방법
1. 그림으로 이해
💡 소문자의 왼쪽 회전(이동) 방법
- "abcdefghijk"의 문자열의 각각의 요소를 분리한 뒤 왼쪽으로 3칸 이동하는 과정입니다.(rotation = -3)
💡 소문자의 오른쪽 회전(이동) 방법
- "abcdefghijk"의 문자열의 각각의 요소를 분리한 뒤 오른쪽으로 3칸 이동하는 과정입니다.(rotation = 3)
2. 소스코드로 이해
💡 소문자 문자열 왼쪽/오른쪽 회전(이동) 방법
- “abcdefghijk”라는 문자열을 제공받았을 때 소문자를 기준으로 rotation(회전 수) 값이 음수일 때는 왼쪽으로 이동하고, 양수일 때는 오른쪽으로 이동하는 방법을 알아봅니다.
1. 제공받은 문자열을 기반으로 배열로 전환하고 배열을 순회합니다.
2. 순회하는 문자의 요소를 ASCII Code로 전환하고 소문자의 첫 번째 문자인 ‘a’(97)을 뺍니다.
(ASCII Code에서 소문자의 범위는 97 ~ 122입니다)
3-1. 회전수 값이 양수이면 rotation 만큼 오른쪽으로 이동합니다.
- 해당 값은 ‘a’(97)의 값을 뺀 값에 회전하려는 칸을 더합니다. 그리고 총소문자의 개수 26으로 나누면 결과값이 나옵니다.
3-2. 회전수 값이 음수이면 rotation 만큼 왼쪽 이동
- 해당 값은 ‘a’(97)의 값을 뺀 값에 회전하려는 칸을 더하고 26을 더합니다. 그리고 총 소문자의 개수 26으로 나누면 결과값이 나옵니다.
4. 결과로 나온 값에 + ‘a’(97)을 더한 뒤 문자로 변환하여 최종 더 합니다.
String answer = "";
int rotation = 3;
int resultAscii = 0;
String text = "abcdefghijk"; // 텍스트
// [STEP1] 제공받은 문자열을 기반으로 배열로 전환하고 배열을 순회합니다.
String[] textArr = text.toLowerCase().split("");
for (int i = 0; i < textArr.length; i++) {
// [STEP2] 문자의 ASCII 코드를 빼고 소문자를 뺍니다.
int subStrAsciiCode = textArr[i].charAt(0) - 'a';
// [CASE3-2] '회전수 값이 양수'이면 rotation 만큼 오른쪽으로 이동
if (rotation > 0) {
resultAscii = (subStrAsciiCode + rotation) % 26;
}
// [CASE3-2] '회전수 값이 음수'이면 rotation 만큼 오른쪽으로 이동
else {
resultAscii = (subStrAsciiCode + rotation + 26) % 26;
}
// [STEP4] 이동한 문자의 ASCII 코드를 구하고 이를 문자로 변환하여 결과값에 하나씩 추가합니다
answer += (char) (resultAscii + 'a');
}
System.out.println("결과값 :: " + answer); // 결과값 :: defghijklmn (rotation 값이 3인 경우)
System.out.println("결과값 :: " + answer); // 결과값 :: xyzabcdefgh (rotation 값이 -3인 경우)
💡 [참고] ASCII 코드의 범위
2) 대문자의 왼쪽/오른쪽 회전(이동) 방법
1. 그림으로 이해
💡 대문자의 왼쪽 회전(이동) 방법
- ABCDEFGHIJK의 문자열의 각각의 요소를 분리한 뒤 왼쪽으로 3칸 이동하는 과정입니다.(rotation = -3)
💡 대문자의 오른쪽 회전(이동) 방법
- ABCDEFGHIJK의 문자열의 각각의 요소를 분리한 뒤 오른쪽으로 3칸 이동하는 과정입니다.(rotation = 3)
2. 소스코드로 이해
💡 대문자 문자열 왼쪽/오른쪽 회전(이동) 방법
- “ABCDEFGHIJK”라는 문자열을 제공받았을 때 대문자를 기준으로 rotation(회전 수) 값이 음수일 때는 왼쪽으로 이동하고, 양수일 때는 오른쪽으로 이동하는 방법을 알아봅니다.
1. 제공받은 문자열을 기반으로 배열로 전환하고 배열을 순회합니다.
2. 순회하는 문자의 요소를 ASCII Code로 전환하고 대문자의 첫 번째 문자인 ‘A’(65)을 뺍니다.
(ASCII Code에서 대문자의 범위는 65 ~ 90입니다)
3-1. 회전수 값이 양수이면 rotation 만큼 오른쪽으로 이동합니다.
- 해당 값은 ‘A’(65)의 값을 뺀 값에 회전하려는 칸을 더합니다. 그리고 총 대문자의 개수 26으로 나누면 결과값이 나옵니다.
3-2. 회전수 값이 음수이면 rotation 만큼 왼쪽 이동
- 해당 값은 ‘A’(65)의 값을 뺀 값에 회전하려는 칸을 더하고 26을 더합니다. 그리고 총 대문자의 개수 26으로 나누면 결과값이 나옵니다.
4. 결과로 나온 값에 + ‘A’(65)을 더한 뒤 문자로 변환하여 최종 더 합니다.
String text = "abcdefghijk"; // 텍스트
int rotation = 3; // 회전 수
int resultAscii = 0;
// [STEP1] 제공받은 문자열을 기반으로 배열로 전환하고 배열을 순회합니다.
String[] textArr = text.toUpperCase().split("");
for (int i = 0; i < textArr.length; i++) {
// [STEP2] 문자의 ASCII 코드를 빼고 대문자를 뺍니다.
int subStrAsciiCode = textArr[i].charAt(0) - 'A';
// [CASE3-2] '회전수 값이 양수'이면 rotation 만큼 오른쪽으로 이동
if (rotation > 0) {
resultAscii = (subStrAsciiCode + rotation) % 26;
}
// [CASE3-2] '회전수 값이 음수'이면 rotation 만큼 오른쪽으로 이동
else {
resultAscii = (subStrAsciiCode + rotation + 26) % 26;
}
// [STEP4] 이동한 문자의 ASCII 코드를 구하고 이를 문자로 변환하여 결과값에 하나씩 추가합니다
answer += (char) (resultAscii + 'A');
}
System.out.println("결과값 :: " + answer); // 결과값 :: DEFGHIJKLMN (rotation 값이 3인 경우)
System.out.println("결과값 :: " + answer); // 결과값 :: XYZABCDEFGH (rotation 값이 -3인 경우)
💡 [참고] ASCII 코드의 범위
오늘도 감사합니다. 😀
반응형
'Java > Short 개발' 카테고리의 다른 글
[Java/Short] SecureRandom을 이용한 랜덤 문자열 생성 방법: 숫자, 문자, 특수문자 조합, 임시 비밀번호 (0) | 2024.02.15 |
---|---|
[Java/Short] 소문자/대문자 범위 내에 합, 차이 구하는 방법 : ASCII Code 활용 (0) | 2024.02.12 |
[Java/Short] 하나의 배열 내 요소 비교 방법 : 전체 요소, 독립적 비교 (0) | 2024.02.12 |
[Java/Short] IPv4, IPv6 정규 표현식(RegExp) 구성 방법 (4) | 2024.01.29 |
[Java/Short] SecureRandom을 이용한 랜덤 숫자/문자(난수) 생성 방법 (0) | 2024.01.22 |