| 그냥 강의만 듣고 따라적으면 실력이 별로 안늘 것 같다. 오늘은 문제를 보고 문제안에 들어갈 이론들은 뭐가 있을지 먼저 한번 생각해보고 강의를 듣고 공부해야겠다. 강의를 듣기전에 대충 이런게 사용되지 않을까..? 먼저 생각해보면 안하는것보단 낫겠지..? |
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. 대소문자 변환
설명
대문자와 소문자가 같이 존재하는 문자열을 입력받아대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
//이 문장으로 알 수 있는 내용은 문자열(String)을 "입력"받아서 대소문자를 변환하여 출력하는 것이니까 String 타입으로 리턴한다는 것을 알 수 있다.
// 사용자로부터 입력받겠다는 것은 즉, Scanner 클래스를 사용하겠다는 것을 유추해내고 활용할 줄 알아야 하며
// 대문자와 소문자를 변환하는 Character 클래스의 isUpperCase() 와 isLowerCase도 활용할 줄 알아야 한다.
입력
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
출력
첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.
예시 입력 1
StuDY
예시 출력 1
문제 감상 :
오늘은 키워드는 잘 뽑아냈는데 활용하는 방법이 미숙했다. 머리속으로는 Scanner쓰면 될 것 같은데 어떻게 쓰는지를 몰랐고, toUpperCase를 사용할때 Character.toUpperCase() 처럼 사용하는지도 알지 못했다.
객체 생성도 객체생성연산자 new를 사용해서 객체생성하는 것은 알고있었는데 언제 어떻게 객체를 생성해서 그 객체를 활용해야 하는지는 모르고 있었다. 다음에는 객체생성에 대해 다시한번 공부하고 다음문제를 공부해야겠다.
그리고 막상 코딩을 하라고 하면 머릿속이 하얘져서 무엇부터 일단 써야하는지 두렵기만 하다... 시작이 반이라는 말처럼 첫 걸음을 어떻게든 일단 먼저 떼야 하는데.. 코딩에 있어서 어떤 의식의 흐름으로 코드를 짜야 하는지 아직 모르겠다... 알고리즘이나 디자인패턴 같은 것들을 공부하면 좀 나아질 수 있을까...?
'Practice > 알고리즘' 카테고리의 다른 글
| 파이썬 알고리즘: K번째 큰 수 구하기. (0) | 2022.11.14 |
|---|---|
| 파이썬 알고리즘: K번째 수 구하기 (0) | 2022.11.11 |
| 파이썬 알고리즘 : K번째 약수 구하기. (1) | 2022.11.10 |
| CodingTest_ch.01_03 (문장 속 단어) (0) | 2022.09.30 |
| CodingTest_ch.01_01 (문자 찾기) (0) | 2022.09.28 |