반응형
인프런의 "자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비" 강좌를 수강했습니다.
들어가기에 앞서..
테스트 환경 - 코드는 백준 & 프로그래머스의 테스트 형태를 지닌다.
main 함수 내부는 백준, solution() 메소드 내부에 실제 기능을 작성하는 프로그래머스의 형태를 따라 테스트한다.
public class Main {
private int solution(type args1, type args2) {
int answer = 0;
// Input your Code.
return answer;
}
public static void main(String[] args) {
// Scanner sc = ...
}
}
Q1-01. 문자 찾기
문자열 하나와 알파벳 하나를 입력 받아, 해당 문자열 안에 알파벳이 몇 개 존재하는지 알아내는 문제
단, 대소문자 상관 없음
처음 쓴 답
첫 번째는 문자열의 길이만큼 반복해서, 소문자로 바꾼 문자열을 split
으로 구분해 자른 알파벳을 문자c와 비교하는 식으로 했다.
이렇게 출력하면 숫자 뒤에 '2%' 와 같이 기호가 달라붙어 출력되어 오답처리가 됐다.
두 번째는 문자열을 소문자로 바꾸고, toCharArray()
를 써서 문자 배열의 값을 비교하는 식으로 했지만,
t의 값이 대문자일 경우에는 카운트하지 못해 오답처리가 됐다.
...
Scanner sc = new Scanner(System.in);
int answer = 0;
String str = sc.next();
String c = sc.next();
for(int i=0; i<str.length(); i++) {
if(str.toLowerCase().split("")[i].equals(c)){
answer++;
}
}
return answer;
...
for(int i=0; i<str.length(); i++){
if(str.toLowerCase().toCharArray()[i] == t){
answer++;
}
}
수정한 코드
강의를 참고하여 아래와 같이 수정했다.
import java.util.Scanner;
public class Main {
public int solution(String str, char t){
int answer = 0;
str = str.toUpperCase();
t = Character.toUpperCase(t);
for(char x : str.toCharArray()){
if(x == t) answer++;
}
return answer;
}
public static void main(String[] args){
Main sol = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
char c = sc.next().charAt(0);
System.out.println(sol.solution(str, c));
}
}
정리
- 문자 하나를 입력 받을 땐
charAt(index)
을 이용해 받을 수 있다. - `대소문자 구분이 없을 경우`에는, 대소문자 중 하나로 통일시켜주자!
- 문자열을 한 글자씩 비교하는 등 문자로 분해하기 위해서
string.toCharArray()
,string.charAt()
활용하자. (자바 String method 참고) - foreach 문을 사용하는 것이 직관적이고, 코드도 단축된다.
주의
foreach 문에는 문자열 자체가 오면 안된다. 배열이나 Iterator Collection 등이 와야한다.
반응형
'Study > 알고리즘' 카테고리의 다른 글
[알고리즘/인프런] String(문자열) #1-06. 중복문자제거 (2) | 2022.04.14 |
---|---|
[알고리즘/인프런] String(문자열) #1-05. 특정문자 뒤집기 (0) | 2022.04.13 |
[알고리즘/인프런] String(문자열) #1-04. 단어 뒤집기(StringBuilder) (0) | 2022.04.12 |
[알고리즘/인프런] String(문자열) #1-03. 문장 속 단어 (0) | 2022.04.07 |
[알고리즘/인프런] String(문자열) #1-02. 대소문자 변환 (0) | 2022.04.06 |