대소문자 변환
package inflearn21y12;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public String solution(String str) {
String answer = "";
for(char x : str.toCharArray()) {
if(Character.isLowerCase(x)) {
answer += Character.toUpperCase(x);
}else {
answer += Character.toLowerCase(x);
}
}
return answer;
}
public static void main(String[] args) throws IOException{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(T.solution(str));
}
}
확장된 for문을 이용해서 str을 Character형으로 받아서 isLowerCase를 이용하면 소문자 인지 확인하는
toLowerCase , toUpperCase를 이용해서 소문자 -> 대문자 , 대문자 -> 소문자로 바꿔주었다.
대문자 : 65 ~ 90
소문자 : 97 ~ 122
대문자 하고 소문자 차이 32난다 이걸 이용해서 풀 수 도 있음.
public String solution(String str) {
String answer = "";
for(char x : str.toCharArray()) {
if(x >= 65 && x <= 90) {
answer += (char)(x+32);
}else {
answer += (char)(x-32);
}
}
return answer;
}
가장 긴 단어 출력
it is time to study 하면 study가 제일 기므로 study 출력
public String solution(String str) {
String answer = "";
int m = Integer.MIN_VALUE; // 가장 작은 값으로 초기화 됨 0이 제일 작은줄 알았는데
String[] s = str.split(" ");
for(String x : s) {
int len = x.length();
if(len>m) {
m = len;
answer = x;
}
}
return answer;
}
Integer.MIN_VALUE 를 이용하면 0보다 작은 int형의 제일 작은 값을 얻을 수 있다.
split배열로 넣어줬따.
public String solution(String str) {
String answer = "";
int m = Integer.MIN_VALUE, pos; // 변수 두개 선언 하는 방법 뒤에도 가능하다..
while((pos=str.indexOf(' ')) != -1){
String tmp = str.substring(0, pos); // pos 전까지
int len = tmp.length();
if(len>m) { // 같은 단어가 나오면 앞에 있는 단어가 나와야 하므로 ">="로 하지 않는다.
m = len;
answer = tmp;
}
str = str.substring(pos+1); // 뒤로 쭉 짤라준다.
}
if(str.length()>m) answer=str;
return answer;
}
항상 int m = 0 으로 했었는데
Integer.MIN_VALUE; 를 이용해서 더 작은 값을 초기화 하는 방법을 알았고,
indexOf로 다음값에 (" ") 이 없으면 -1을 반환하기 때문에 while문을 != -1로 해주고,
len을 이용해서 단어의 길이 즉 tmp의 길이를 len에 넣어준다.
그리고 if문으로 길이가 긴 단어가 여러개이면 가장 앞쪽에 위치한 단어를 답으로 한다.
단어 뒤집기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public ArrayList<String> solution(int n, String[] str) {
ArrayList<String> answer = new ArrayList();
for(String x : str) {
String tmp = new StringBuilder(x).reverse().toString();
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) throws IOException{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] str = new String[n];
for(int i=0; i<n; i++) {
str[i] = br.readLine();
}
for(String x : T.solution(n, str)) {
System.out.println(x);
}
}
}
StringBuilder를 이용해서 reverse로 문자를 뒤집었다.
근데 빌더를 이용하지 않고, 구현해본다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public ArrayList<String> solution(int n, String[] str) {
ArrayList<String> answer = new ArrayList();
for(String x : str) {
char[] s = x.toCharArray();
int lt = 0 , rt=x.length()-1;
while(lt<rt) {
char tmp=s[lt];
s[lt] = s[rt];
s[rt] = tmp;
lt++;
rt--;
}
String tmp = String.valueOf(s);
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) throws IOException{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] str = new String[n];
for(int i=0; i<n; i++) {
str[i] = br.readLine();
}
for(String x : T.solution(n, str)) {
System.out.println(x);
}
}
}
toCharArray로 String 값을 받는다.
그리고 맨 왼쪽 값 0으로 하고, 맨 오른쪽 값 rt를 length()로 받아준 후 -1을 해줘야한다.
while문의 조건을 어떻게 줄 것인가?
lt<rt 일떄 돌아가야 한다. 오른쪽 값이 클 경우
만약 good 을 입력하면 일단 0 , 3 교체 그리고 1 , 2 교체 그러면 lt 값이 커져서 그만두고 교환이 잘 됐다.
그럼 이제 홀 수 일땐? 0, 2 교체 그리고 1 , 1이 돼서 rt 가 클때만 돌아가야 하는데 크지 않기 때문에 돌아가지 않는다.
String tmp는 왜 해준 것이냐 하면 s값은 지금 char[] 형태로 되어 있어서 String형으로 변환해야 하기 떄문!
특정 문자 뒤집기
영어 알파벳이 나오면 뒤 집고 , 특수 문자가 나오면 자기 자리 그대로 있는 문자열을 만드는 문제
예를 들면 a^d 이면 d^a 이런식으로..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public String solution(String str) {
String answer = "";
char[] s = str.toCharArray();
int lt = 0, rt = str.length()-1;
while(lt<rt) {
if(!(Character.isAlphabetic(s[lt]))) { // 알파벳이 아닐떄 확인하는 메소드
lt++;
}else if(!(Character.isAlphabetic(s[rt]))){ // rt가 알파벳이 아닐때 확인
rt--;
}else {
char tmp = s[lt];
s[lt] = s[rt];
s[rt] = tmp;
lt++; rt--;
}
}
answer = String.valueOf(s);
return answer;
}
public static void main(String[] args) throws IOException{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.print(T.solution(str));
}
}
맨 왼쪽, 맨 오른쪽 값을 정의 하는 부분이 중요하다.
그리고 교환 법칙 그리고 toCharArray()로 String 문자열을 뽑아내는것도 중요
Character.isAlphabetic이라는 메소드를 이용해서 알파벳을 판별할 수 있다.
'Algorithm' 카테고리의 다른 글
[프로그래머스] 약수의 합 (0) | 2022.02.04 |
---|---|
[인프런] 알고리즘 Array , Two pointers (0) | 2021.12.27 |
[구름] 소인수 분해 (0) | 2021.12.26 |
[구름] 구구단+ (0) | 2021.12.26 |
[구름] 홀수의 합 (0) | 2021.12.26 |