Practice/알고리즘

CodingTest_ch.01_02 (대소문자 변환)

밍미a 2022. 9. 29. 00:48
728x90
그냥 강의만 듣고 따라적으면 실력이 별로 안늘 것 같다. 
오늘은 문제를 보고 문제안에 들어갈 이론들은 뭐가 있을지 먼저 한번 생각해보고
강의를 듣고  공부해야겠다.
강의를 듣기전에 대충 이런게 사용되지 않을까..? 먼저 생각해보면 안하는것보단 낫겠지..?

 

2. 대소문자 변환

더보기
2. 대소문자 변환
 

설명

대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.

입력

첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.

문자열은 영어 알파벳으로만 구성되어 있습니다.

출력

첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.

예시 입력 1 

StuDY

예시 출력 1

sTUdy​

 

내가 유추해보는 문제풀이

대문자와 소문자가 같이 존재하는 문자열 이니까 메소드에 String타입의 데이터를 하나 받아오지않을까..?
입력받아 니까... 또 어제처럼 Scanner클래스가 사용될 것 같고...
대문자는 소문자로 소문자는 대문자로 라고 했으니까 toUpperCase 랑 toLowerCase가 사용될 것 같은데...
String 타입에는 글자가 여러개니까 배열로 넣어줘야 할 것이고.. 그 배열에 for문을 돌려서 조건문if를 사용해서
하나하나 대응해봐야하지 않을까..? if(!대문자){toUpperCase}해줘야하고 else if(!소문자){toLowerCase}해줘야 한다.
이런식으로 하면 될 것 같은데.. 이걸 코드로 어떻게 표현을 하지...? 어제 했던거랑 비슷한데 또 까먹었지 또..으휴..

알고 넘어가야 할 이론:

1. String.toCharAyyay() :

문자열을 한 글자씩 쪼개서 char타입의 배열에 넣어주는 메서드이다. 

예시)

  String s1 = "Hello World";
  char[] charArr = s1.toCharArray();

반대로 char형 배열을 합쳐서 하나의 문자열(String)을 만들 수 있다.

 

2. 메소드 :

메소드 선언은 선언부와 실행 블록으로 구성된다. 메소드 선언부는 리턴타입, 메소드이름, 매개변수 선언, 메소드 실행블록 으로 구성되어 있다.

	public String solution(String str){
		String answer=" ";
		return answer;
	}
    /*접근제한자 리턴타입 메소드이름 (매개변수 선언){
    	코드실행블록
    } */

메소드는 동작을 나타낸다. 메소드 하나에 하나의 동작이 들어간다. 

메소드 호출은 클래스.메소드() 로 호출한다.

리턴값이 없는 매소드는 앞에 void를 적어준다.

public static void main(String[] args){
		코드 내용
}

public static void main(String[] args){ } 는 출력할때 사용한다 (? 확실하진 않지만...여러 메소드 모아서 똵 결과값 출력할때 메인 메소드에 적던데...학원선생님한테 물어봐야지 ㅋㅅㅋ)

3. Character 클래스 :

Character 클래스는 기본형 중 char의 값을 객체로 포장한다. 이 클래스는 문자의 형태를 판별해서 문자를 대문자로부터 소문자(또는 그 반대)로 변환하기 위한 각종 매서드를 제공한다.

생성자

Character(char value)

Character 객체를 구축해 기본형 value 인수를 표현할 수 있도록 초기화한다.

주요 매서드

 

매  서  드 설                 명 
 char charValue()  Character 오브젝트의 값을 리턴한다.
 int compareTo(Character anotherCharacter)  2개의 Character를 수치로서 비교한다.
 int compareTo(Object o)  Character 객체를 지정된 객체와 비교한다.
 static int digit(char ch, int radix)  지정된 기수에서의 문자 ch의 수치로서의 값을 리턴한다.
 boolean equals(Object o)  현재 객제와 지정된 객체가 같은지 비교한다.
 static char forDigit(int digit, int radix)  지정된 기수에서의 지정된 숫자의 문자 표현을 판정한다.
 static int getNumericValue(char ch)  Unicode 문자를 정수로 리턴한다.
 static int getType(char ch)  문자의 카테고리를 나타내는 값을 리턴한다.
 int hashCode()  Character의 해시 코드를 리턴한다.
 static boolean isDefined(char ch)  문자가 Unicode로 정의되어있는지를 판별한다.
 static boolean isDigit(char ch)  지정된 문자가 숫자인지를 판별한다.
 static boolean isIdentifierIgnorable(char ch)  지정된 문자가 Java 식별자 또는 Unicode 식별자내 무시할수있는 문자인지 판별
 static boolean isISOControl(char ch)  지정된 문자가 ISO 제어 문자인지를 판별한다.
 static boolean isJavaIdentifierPart(char ch)  지정된 문자가 Java 식별자의 선두 이외의 일부로서 사용할수있을지 판별한다.
 static boolean isJavaIdentifierStart(char ch)   지정된 문자가 Java 식별자의 선두의 문자로서 사용할수있을지 판별한다.
 static boolean isLetter(char ch)  지정된 문자가 범용 문자인지를 판별한다.
 static boolean isLetterOrDigit(char ch)  지정된 문자가 범용 문자인지 숫자인지를 판별한다.
 static boolean isLowerCase(char ch)  지정된 문자가 소문자인지를 판별한다.
 static boolean isSpaceChar(char ch)  지정된 문자가 Unicode의 스페이스 문자인지를 판별한다.
 static boolean isTitleCase(char ch)  지정된 문자가 타이틀 케이스 문자인지를 판별한다.
 static boolean isUnicodeIdentifierPart(char ch)  지정된 문자가 Unicode 식별자의 선두 이외의 일부로서 사용할수있을지 판별한다.
 static boolean isUnicodeIdentifierStart(char ch)  지정된 문자가 Unicode 식별자의 선두 문자로서 사용할수있을지 판별한다.
 static boolean isUpperCase(char ch)  지정된 문자가 대문자인지를 판별한다.
 static boolean isWhitespace(char ch)  지정된 문자가 Java의 기분에 따른 공백인지를 판별한다.
 static char toLowerCase(char ch)  지정된 문자를 대응하는 소문자에 매핑한다.
 String toString()  문자의 값을 표현하는 String 객체를 리턴한다.
 static char toTitleCase(char ch)  문자의 인수를 대응하는 타이틀 케이스로 변환한다.
 static char toUpperCase(char ch)  문자의 인수를 대응하는 대문자로 변환한다.

https://blog.naver.com/reach_reach/90119095121

 

<JAVA> 8.1.2.3 Character 클래스

* 8장 자바의 중요 클래스 < 목록가기 > 8.1.2.3 Character 클래스 Character 클래스는 기본형 중 ...

blog.naver.com

문제풀이 :

package ch01_02;
import java.util.*;

public class Main {
	public String solution(String str){
		String answer=" ";
		for(char x: str.toCharArray()){
			if(Character.isLowerCase(x)){
				//isLowerCase(x) x가 소문자냐~?라고 물어보는 메서드
				answer+=Character.toUpperCase(x);
						//x가 소문자냐? 라고 물어봤을때 참이면 answer에 누적한다.Character.toUpperCase(x)한 값을
						//즉 소문자를 대문자로 바꾼 값을 answer에 누적한다.		
			}else {
				answer+=Character.toLowerCase(x);
				//그렇지 않으면 대문자를 소문자로 바꾸어서 answer에 누적한다.
			}
			
		}
		return answer;
	}
	public static void main(String[] args){
		Main T = new Main();
        //Main 클래스를 T라고 하는 새로운 객체를 생성해준다.
		Scanner kb = new Scanner(System.in);
        // Scanner 클래스를 이용해서 사용자가 입력한 값을 입력받아 kb변수에 넣어준다.
		String str = kb.next();
        //kb로 입력받은 값을 next메소드를 이용해 스트링값으로 읽어서 str 변수에 넣어준다.
		System.out.println(T.solution(str));
        //str 값을 받는 solution메서드를 실행해준다.
	}
}

뜯어먹는 문제분석:

2. 대소문자 변환

더보기
2. 대소문자 변환
 

설명

대문자와 소문자가 같이 존재하는 문자열을 입력받아대문자는 소문자소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.

//이 문장으로 알 수 있는 내용은 문자열(String)을 "입력"받아서 대소문자를 변환하여 출력하는 것이니까 String 타입으로 리턴한다는 것을 알 수 있다.

// 사용자로부터 입력받겠다는 것은 즉, Scanner 클래스를 사용하겠다는 것을 유추해내고 활용할 줄 알아야 하며

// 대문자와 소문자를 변환하는 Character 클래스의 isUpperCase() 와 isLowerCase도 활용할 줄 알아야 한다.

입력

첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.

문자열은 영어 알파벳으로만 구성되어 있습니다.

출력

첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.

예시 입력 1 

StuDY

예시 출력 1

 

 

문제 감상 :

오늘은 키워드는 잘 뽑아냈는데 활용하는 방법이 미숙했다. 머리속으로는 Scanner쓰면 될 것 같은데 어떻게 쓰는지를 몰랐고, toUpperCase를 사용할때 Character.toUpperCase() 처럼 사용하는지도 알지 못했다. 

객체 생성도 객체생성연산자 new를 사용해서 객체생성하는 것은 알고있었는데 언제 어떻게 객체를 생성해서 그 객체를 활용해야 하는지는 모르고 있었다.  다음에는 객체생성에 대해 다시한번 공부하고 다음문제를 공부해야겠다.

그리고 막상 코딩을 하라고 하면 머릿속이 하얘져서 무엇부터 일단 써야하는지 두렵기만 하다... 시작이 반이라는 말처럼 첫 걸음을 어떻게든 일단 먼저 떼야 하는데.. 코딩에 있어서 어떤 의식의 흐름으로 코드를 짜야 하는지 아직 모르겠다... 알고리즘이나 디자인패턴 같은 것들을 공부하면 좀 나아질 수 있을까...?