* 문제 설명
한 개의 문자열을 입력받고, 특정 문자를 입력받은 후
해당 특정문자가 대소문자에 관계없이 문자열에 몇 개 존재하는지 알아내어 출력해주는 문제
* 소스코드
package algorithm;
import java.util.Scanner;
public class Main {
public int solution(String str, char t) {
int answer = 0;
str = str.toUpperCase(); //string이 대문자로 된다.!
t = Character.toUpperCase(t); // t는 문자이기 때문에 Character라는 클래스에서 클래스에 있는 메서드 사용한다.
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){
Main T = new Main(); //static에서 인스턴스 메서드를 호출하려면 클래스 객체를 생성해야함.
Scanner kb = new Scanner(System.in);
String str = kb.next(); // kb.next()를 함으로써 "문자열"을 읽어들임
char c = kb.next().charAt(0); //문자열에서 문자 하나만 가져와야하니!
System.out.println(T.solution(str, c));
kb.close(); //스캐너는 항상 이렇게 열고 닫아 주기!!
}
}
// before생각: input1을 배열에 넣고 한 단어씩 비교해가면서 몇 갠지 세기!
*정리된 소스코드
* 주의
char ch = kb.next();
이렇게 ch를 받을 수가 없다!
next(), nextLine()은 문자열 String 값을 받는 함수이기 때문에 쓸 수가 없다.
char ch = kb.next().charAt(0);
.charAt()은 문자열에서 문자를 뽑는 함수로 이를 사용한다.
String str = kb.next(); // kb.next()를 함으로써 "문자열"을 읽어들임
char ch = kb.next().charAt(0); //kb.next()를 함으로써 "문자열"을 읽어들이고 String을 인덱스로 접근함
* 추가공부
다른 방식으로 푼 사람의 코드이다.
특정문자를 애초에 제한하지 않고 String으로 받아들이게 한다.
for문에서 문자열 inputWord의 길이를 제한으로 두고 비교해나간다.
for (int i = 0; i < inputWord.length(); i++) {
if (String.valueOf(inputWord.charAt(i)).equalsIgnoreCase(inputOneCharacter)) {
equalsCount++;
}
}
** valueOf() 메서드는 ()괄호 안의 해당 객체를 String 객체로 변환시키는 역할을 한다. 즉, String의 객체로 형변환한다.
** equalsIgnoreCase() 메서드는 대소문자 구분없이 문자열 자체만을 비교하는 역할을 한다.
자바에서 문자열을 비교하는 함수 equalsIgnoreCase(), equals()
특징)
equalsIgnoreCase(): 대소문자 구분 안 함.
equals: 대소문자 구분함.
문자열이 같은 경우 true 리턴
문자열이 다른 경우 false 리턴
문법)
equalsIgnoreCase(문자열)
** toUpperCase(): 문자열을 대문자로 변경
** toLowerCase(): 문자열을 소문자로 변경
import java.util.Scanner;
public class Algorithm {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputWord = sc.next();
String inputOneCharacter = sc.next();
int equalsCount = 0;
for (int i = 0; i < inputWord.length(); i++) {
if (String.valueOf(inputWord.charAt(i)).equalsIgnoreCase(inputOneCharacter)) {
equalsCount++;
}
}
System.out.println(equalsCount);
}
}
위 소스코드 출처: https://updown90.tistory.com/30?category=862703
07/20 복습
// 한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지
// 대소문자 구분 x
// 첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어짐.
// 첫 줄에 해당 문자 개수 출력
import java.util.Scanner;
public class Practice_01 {
public int solution(String str, char ch) {
int answer = 0;
str = str.toUpperCase();
//내가 짠 코드
//ch = ch.charAt(0).toUpperCase();
ch=Character.toUpperCase(ch); //문자니깐 Character라는 클래스에 있는 메소드 사용
for(int i=0; i<str.length(); i++) {
if(str.charAt(i)==ch) answer++;
}
return answer;
}
public static void main(String[] args) {
Practice_01 T = new Practice_01(); //객체 생성
Scanner kb = new Scanner(System.in);
String str = kb.next();
char ch = kb.next().charAt(0); // 한 문자 받기
System.err.println(T.solution(str, ch));
}
}
'Problem Solving > Algorithm Concepts' 카테고리의 다른 글
[알고리즘] 스택(Stack) 정리 & 문제 풀이(Python) (0) | 2022.01.31 |
---|---|
[운영체제] 메모리 구조 (재귀호출 vs 반복문) (0) | 2022.01.26 |
[알고리즘] 재귀함수(Recursive function) 정리 & 문제 풀이(Python) (0) | 2022.01.13 |
[Java Algorithm] 1-3 문장 속 단어( for each문, split(), indexOf(), substring()) (0) | 2021.08.16 |
[Java Algorithm] 1-2 대소문자 변환(대문자는 소문자로, 소문자는 대문자로) (0) | 2021.08.15 |