Develop

[프로그래머스] 대소문자 바꿔서 출력하기 본문

개인 공부/프로그래머스

[프로그래머스] 대소문자 바꿔서 출력하기

개발 기록 2024. 1. 8. 16:29

 

문제

 


 

내 풀이

 

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        
        // 전체 글자수 확인
        int len = a.length();
        int count = 0;
        
        글자수만큼 while 동작
        while(--len >=0) {  

	// while문 안에서 글자를 차례대로 하나씩 가져옴
	String al = a.substring(count, count+1);;

	// 가져온 글자의 대문자와 비교한 후 같으면 소문자, 다르면 대문자를 출력 
	if(al.equals(al.toUpperCase())) {
		System.out.print(al.toLowerCase());
	}
	else {
		System.out.print(al.toUpperCase());
	}
	count++;
        }
    }
}

 

 

 

내 로직

- 전체 글자수 확인

- 글자수만큼 while 동작

- while문 안에서 글자를 차례대로 하나씩 가져옴

- 가져온 글자의 대문자와 비교한 후 같으면 소문자, 다르면 대문자를 출력 


 

다른 사람 풀이1

 

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String answer = "";

        //Stack <Character> stack = new Stack <> ();

        for(Character c : a.toCharArray()){
            if(Character.isUpperCase(c)){
                //stack.push(Character.toLowerCase(c));
                answer += Character.toLowerCase(c);
            }
            else if(Character.isLowerCase(c)){
                //stack.push(Character.toUpperCase(c));
                answer += Character.toUpperCase(c);
            }
        } 
        System.out.println(answer);
    }
}

 

 

풀이1 로직

- 향상된 for문 이용

- 입력한 글자의 대문자와 같으면 String형 answer에 소문자로 글자 추가,

입력한 글자의 소문자와 같으면 answer에 대문자로 글자 추가

 

느낀점

toUpperCase()와 toLowerCase()만 알고 있었는데

isUpperCase()와 is LowerCase()가 있다는 것을 알게 되었다.

 

* toUpperCase(a) / toLowerCase(a) : a를 대문자/소문자로 바꿔준다

* isUpperCase(a) / isLowerCase(a) : a가 대문자/소문자인지 확인한다

 


 

다른 사람 풀이2

 

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        for(int i=0; i<a.length(); i++) {
            char c = a.charAt(i);
            if(Character.isUpperCase(c)) {
                System.out.print((char)(c+32));
            }
            else {
                System.out.print((char)(c-32));
            }
        }
    }
}

 

풀이2 로직

- for문 이용

-  대문자면 소문자로 변경(c+32) , 대문자가 아니면 대문자로 변경(c-32)

- c+32 / c-32 : 아스키코드를 이용한 것이다

 

느낀점

아스키코드를 이렇게 이용하는 방법이 있음을 알게되었다

 


 

다른 사람 풀이3

 

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();

        String answer = "";

        for(int x : a.toCharArray()){
        	if(x>=97 && x<=122)answer += (char)(x-32); else answer += (char)(x+32);
	}
        System.out.print(answer);
    }
}

 

풀이3 로직

- 향상된 for문 사용

- 아스키코드를 비교하여 97보다 크거나 같고 122보다 작거나 같으면 -32, 아니라면 +32

 

느낀점

코드 길이가 정말 짧다

기본적인 아스키코드의 숫자를 알고 이용할 줄 알아야 할듯

풀이2의 업그레이드 버전같음