ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [네이버클라우드 캠프/1주차] "dBEfIZ" → "ajEfcC" 출력하기
    네이버클라우드 캠프 | BE/Java 과제 2023. 3. 20. 11:16
    728x90

    3월 14일(화) 처음으로 과제를 받아 풀며

    사고의 방식 혹은 생각의 흐름에 대해 정리하고 싶어 블로그 글로 남깁니다.

     

    문제 : 삼항조건 연산자를 사용하여 "dBEfIZ" → "ajEfcC" 출력하시오.

     

    1. 주어진 값과 결과 값의 아스키코드를 먼저 확인하였습니다.

    초기 값 결과 값
    d 100 a 97
    B 66 j 106
    E 69 E 69
    f 102 f 102
    I 73 c 99
    Z 90 C 67

    같은 자리에 위치한 값을 비교하며 (d-a, B-j, E-E 등), 특정값을 더하거나 빼는지 혹은 곱하거나 나누는지 등을 확인했으나

    현재 위치한 값에서는 특정한 규칙을 찾을 수 없었습니다.

     

    2. 주어진 값을 역순으로 나열하였습니다.

    초기 값 역순 값 결과 값
    d 100 Z 90 a 97
    B 66 I 74 j 106
    E 69 f 102 E 69
    f 102 E 69 f 102
    I 74 B 66 c 99
    Z 90 d 100 C 67

    주어진 값을 역순으로 나열한 뒤, 같은 자리에 위치한 값을 비교하였습니다.

     

    첫 줄에 위치한 Z와 a 값을 비교했을 때에는 역순 값 + 7 = 결과 값이 나오는 것을 확인하며

    '역시 이것도 규칙이 아닌가...' 라고 생각했지만

    역순 값 계산 중 결과 값
    Z 90 +7 a 97
    I 73 +33 j 106
    f 102 -33 E 69
    E 69 +33 f 102
    B 66 +33 c 99
    d 100 -33 C 67

    a와 Z를 제외하고는 모두 ±33이 되는 것을 확인할 수 있었습니다.

    소문자 → 문자로 변경 : -33
    대문자 → 문자로 변경 : +33

     

    엑셀에 정리하여 확인해보면, 앞서 얘기한 a와 Z를 제외하고 모두 대응되는 알파벳이 있는 것을 확인할 수 있습니다.

     

    3. 최종 소스코드

    public class Main {
    	public static void main(String[] args) {
    		String str = "dBEfIZ"; // 기본
    		
    		String newStr ="";		// 역순 결과 집어넣기
    		String res ="";			// 최종 결과 출력
    		
    		// 역순 출력
    		for(int i = str.length() - 1; i >= 0; i--) {
    			newStr += str.charAt(i);
    		}
    		System.out.println("역순 결과 : "+ newStr);
    		
    		// 대소문자 변경
    		for(int i = 0; i < str.length(); i++) {
    			char ch = newStr.charAt(i);
    			char capCh = (ch == 90)? (char)97 : (char)((65 <= ch && ch <= 90)? ch+33 : ch-33);
    			res += capCh;
    		}
    		System.out.println("최종 결과 : " + res);
    	}
    }

     

    3-1. 응용 버전

    public class Main {
    	public static void main(String[] args) {
    		String str = "dBEfIZ";		// 기본
    		String res ="";			// 최종 결과 출력
    		
    		// 대소문자 변경 + 역순 출력
    		for(int i = 0; i < str.length(); i++) {
    			char ch = str.charAt(i);
    			ch = (ch == 90)? (char)97 : (char)((65 <= ch && ch <= 90)? ch+33 : ch-33);
    			res = ch + res;
    		}
    		System.out.println(res);
    	}
    }
Designed by Tistory.