자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 1. 문자열(1)

2024. 2. 5. 16:31Algorithm/inflearn

 

1. 문자 찾기

- 문자열(string형): 대문자, 소문자 변경하려면, 문자열 변수.toUpperCase();

- 문자(char형): Character.toUpperCase(문자형 변수); 

package inflearn_java;

import java.util.Scanner;

public class Ex1_1 {
	
	public int solution(String str, char t) {
		int answer= 0;
		
		str= str.toUpperCase(); //대문자로 변경(문자열)
		t= Character.toUpperCase(t); //대문자로 변경(문자)
		
		//System.out.println(str+" "+t);
		
		/* method1
		for(int i=0;i<str.length();i++) {
			if(str.charAt(i)==t) {
				answer++;
			}
		}
		*/
		for(char x:str.toCharArray()) {
			if(x==t) {
				answer++;
			}
		}
		
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ex1_1 t = new Ex1_1();	//static없는 인스턴스 메소드를 사용하려면 선언해야함
		Scanner kb = new Scanner(System.in);
		String str=kb.nextLine();
		char c=kb.nextLine().charAt(0);
		
		System.out.print(t.solution(str, c));

	}

}

 

 

 

 

 


2. 대소문자 변환

 

2-1. Character클래스 메소드 사용

- Character 클래스의 isLowerCase() : 소문자이면 true, 아니면 false 반환

- isUpperCase(): 대문자이면 true, 아니면 false 반환

package inflearn_java;

import java.util.Scanner;

public class Ex1_2 {
	
	public String solution(String str) {
		String answer="";
		
		for(char c: str.toCharArray()) {
			if(Character.isLowerCase(c)) {
				answer+= Character.toUpperCase(c);
			}else {
				answer+= Character.toLowerCase(c);
			}
		}
		
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ex1_2 T= new Ex1_2();
		Scanner sc= new Scanner(System.in);
		
		String s= sc.nextLine();
		System.out.println(T.solution(s));
	}

}

 

 

2-2. 아스키넘버(ASCII) 사용해보기

- 대문자: 65~90

- 소문자: 97~122

(소문자-32 = 대문자)

package inflearn_java;

import java.util.Scanner;

public class Ex1_2 {
	
	public String solution(String str) {
		String answer="";
		
		for(char c: str.toCharArray()) {
			if(c>=97 && c<=122) {
				//소문자
				answer+=(char)(c-32);
			}else {
				//c>=65 && c<=90
				//대문자
				answer+=(char)(c+32);
			}
		}
		
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ex1_2 T= new Ex1_2();
		Scanner sc= new Scanner(System.in);
		
		String s= sc.nextLine();
		System.out.println(T.solution(s));
	}

}

 

 


 

 

3. 문장 속 단어

 

 

<나의 풀이>

package inflearn_java;

import java.util.Scanner;
import java.util.StringTokenizer;

public class Ex1_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc= new Scanner(System.in);
		String s= sc.nextLine();
		
		StringTokenizer st= new StringTokenizer(s);
		String answer="";
		
		while(st.hasMoreTokens()) {
			String str= st.nextToken();
			if(answer.length()<str.length()) {
				answer=str;
			}
		}
		
		System.out.println(answer);
	}

}

- StringTokenizer 활용하여 공백을 기준으로 단어를 끊는다.

- 토큰(단어)을 하나씩 가지고 와서 answer(현재 가장 긴 단어)와 비교하여 answe보다 더 길면 answer를 해당 단어로 변경

- 문장 전체를 반복해서 돌고나면 결국 가장 긴 단어만 채택

 

 

<풀이>

- 문자열.split(구분자): 구분자로 문자열을 나눠 문자열 배열로 반환

package inflearn_java;

import java.util.Scanner;

public class Ex1_3_answer {
	
	public String solution(String str) {
		String answer="";
		int m=Integer.MIN_VALUE;	//가장작은수로 초기화
		String[] s= str.split(" ");  //띄어쓰기 기준으로 문자 나눔 
		
		for(String x:s) {
			int len= x.length();
			if(len>m) {
				m=len;
				answer=x;
			}
		}
		
		return answer;
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Ex1_3_answer T = new Ex1_3_answer();
		Scanner kb = new Scanner(System.in);
		String str=kb.nextLine();
		System.out.println(T.solution(str));
	}

}

 

 


4. 단어 뒤집기

<나의 풀이>

- StringBuilder를 활용하면 쉽게 문자열을 뒤집을 수 있다. (reverse())

package inflearn_java;

import java.util.Scanner;

public class Ex1_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc= new Scanner(System.in);
		
		int n= Integer.parseInt(sc.nextLine());
		
		StringBuilder answer= new StringBuilder();
		
		for(int i=0;i<n;i++) {
			StringBuilder sb= new StringBuilder();
			sb.append(sc.nextLine());
			sb.reverse();
			answer.append(sb.toString()+"\n");
		}
		
		System.out.println(answer.toString().trim());
	}

}

 

 

<풀이>

4-1. StringBuilder클래스

- 똑같이 StringBuilder 클래스 활용, 뒤로 연결해서 붙이면 더 간단하게 표현

package inflearn_java;

import java.util.ArrayList;
import java.util.Scanner;

public class Ex1_4_answer {
	
	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) {
		// TODO Auto-generated method stub
		Ex1_4_answer T = new Ex1_4_answer();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		String[] str=new String[n];
		for(int i=0;i<n;i++) {
			str[i]=kb.next();
		}
		for(String x:T.solution(n,str)) {
			System.out.println(x);
		}
	}

}

 

4-2. 문자배열로 변환 후, 하나씩 교체하기

- 문자열.toCharArray() : 문자열-> 문자배열로 변환

- String.valueOf(문자배열): 문자배열 -> 문자열로 변환

package inflearn_java;

import java.util.ArrayList;
import java.util.Scanner;

public class Ex1_4_answer {
	
	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) {
		// TODO Auto-generated method stub
		Ex1_4_answer T = new Ex1_4_answer();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		String[] str=new String[n];
		for(int i=0;i<n;i++) {
			str[i]=kb.next();
		}
		for(String x:T.solution(n,str)) {
			System.out.println(x);
		}
	}

}