반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12916
* 문제 설명
프로그래머스 Level1 문자열 내 p와 y의 개수
대문자, 소문자가 섞여있는 문자열 s
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return하는 solution 완성하시오.
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴
단, 개수를 비교할 때는 대문자와 소문자를 구별하지 않음
* 입출력 예
s | answer |
pPoooyY
|
true
|
Pyy
|
false
|
* 소스코드1
1. 문자열의 길이만큼 연산 str.length()
for문을 사용해서 문자열을 길이만큼 연산하도록 한다.for(int i=0; i<str.length(); i++)
2. 한 문자씩 뜯어보기
그 다음 중요한 점은 문자를 하나씩 보기 위함이다.
문자열 s에서 p의 개수와 y의 개수를 비교하기 때문에 문자를 하나씩 뜯어볼 필요가 있다.
방법은 두 가지!
1) String에 toCharArray()를 사용해 char형 배열 만들기
// toCharArray()로 문자열을 문자형 배열로 만들기
char[] ch = s.toCharArray();
// 배열요소 이용하여 문자 다루기
ch[i] == 'p';
2) String에 charAt()을 사용해 지정된 위치 알려주는 방법
* char charAt(int idex)
지정된 위치(index)에 있는 문자를 알려준다. (index는 0부터 시작)/문자 한 개 반환
// 예시
Stinrg s = "Hello";
Stinrg n = "0123456";
char c = s.charAt(1);
char c2 = n.charAt(1);
결과) c = 'e';
c2 = '1';
3. 대소문자 구별하지 않기 때문에 논리연산자 || 를 사용해 두 가지 경우 모두 고려하기
if(s.charAt(i)=='p'|s.charAt(i)=='P'){
p++;
}
else if(s.charAt(i)=='y'|s.charAt(i)=='Y'){
y++;
}
* 조건에서 '단, 개수를 비교할 때는 대문자와 소문자를 구별하지 않는다'라고 하여
다 대문자로 바꿔도 되고, 다 소문자로 바꿔도 문제 없을거라 생각하여
소문자를 다 대문자로 바꾸어 문제를 풀었는데
그렇게 되면 조건에서 소문자만 계산하기 때문에 다른 예시가 나오게 되면 정답률이 100%가 나올 수 없게 된다.
4. 리턴 값에 맞게 조건 충족시키기
// 방법 1
if(p != y) {
answer = false;
}
return answer;
// 방법 2
if(p + y == 0){
return true;
}
return p == y;
최종 코드)
// 최종코드
import java.util.*;
public class Solution {
public boolean solution(String str) {
boolean answer = true;
int p = 0, y = 0;
for(int i= 0; i < str.length(); i++) {
if(str.charAt(i)=='p' || str.charAt(i) == 'P') { // 대소문자 구별 x
p++;
}
else if(str.charAt(i)=='y' || str.charAt(i) == 'Y') { // 대소문자 구별 x
y++;
}
}
if(p != y) {
answer = false;
}
return answer;
}
public static void main(String[] args) {
Solution T = new Solution();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
//pPoooyY
//true
//Pyy
//false
반응형
'Problem Solving > Algorithm Concepts' 카테고리의 다른 글
[알고리즘] 우선순위 큐, 힙 & 백준(최대 힙, 최소 힙, 가운데를 말해요, 카드 정렬하기) (1) | 2022.10.03 |
---|---|
[Programmers] Level1 직사각형 별찍기 (0) | 2022.08.03 |
[Programmers] Level1 자릿수 더하기 (0) | 2022.08.02 |
[Programmers] Level1 자연수 뒤집어 배열로 만들기 (0) | 2022.08.01 |
프로그래머스 Level 1 모음 (0) | 2022.08.01 |