[프로그래머스] Lv2. 짝지어 제거하기, Lv1. 문자열 내 p와 y의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/12973
짝지어 제거하기
문제
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어, 문자열 S = baabaa 라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
제한사항
- 문자열의 길이 : 1,000,000이하의 자연수
- 문자열은 모두 소문자로 이루어져 있습니다.
풀이
보자마자 어떻게 해야할지 몰라서 힌트를 살폈고,
스택으로 풀이하는 걸 알고는 풀었는데 계속 시간초과가 났었다
원인은 삼항연산자를 사용하지 않고 조건문으로 answer를 return했기 때문이었다..
혹시몰라 여러번 테스트 해도 비슷했다
If문이 시간 복잡도에 미치는 영향은 거의 없다고 알고있는데,,
이 부분은 좀 더 탐구를 해봐야 할 것 같음^^..
코드
import java.util.*;
class Solution
{
public int solution(String s)
{
String [] split = s.split("");
Stack<String> stack = new Stack<>(); // 동적할당
for(String z : split) {
if(!stack.isEmpty() && stack.peek().equals(z)){
stack.pop(); // popopop
}
else {// 같지 않으면 push
stack.push(z);
}
}
// 반복문 종료후 stack이 비어있으면 1 반환, 아니면 0 반환
return stack.isEmpty() ? 1 : 0;
}
}
문자열 내 p와 y의 개수
문제
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한사항
- 문자열 s의 길이 : 50 이하의 자연수
- 문자열 s는 알파벳으로만 이루어져 있습니다.
풀이
split으로 arr를 이용해서 했는데,,,,잘안돼서 그냥 charAt으로 했다.
이런건 그냥 charAt이 나은듯
class Solution {
boolean solution(String s) {
boolean answer = true;
int p = 0;
int y = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 'p' || s.charAt(i)== 'P'){
p += 1;
}
else if(s.charAt(i) == 'y' ||s.charAt(i) == 'Y'){
y += 1;
}
}
if(p==y) answer = true;
else answer = false;
return answer;
}
}