관리 메뉴

JIE0025

[프로그래머스][lv.1] 문자열 내 p와 y의 개수 - 자바(Java) 본문

알고리즘/프로그래머스

[프로그래머스][lv.1] 문자열 내 p와 y의 개수 - 자바(Java)

Kangjieun11 2022. 11. 2. 00:22
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12916

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


프로그래머스 > 연습문제 > 문자열 내 p와 y의 개수


 

문제

 

✅ 풀이 과정

1. 복잡도 고려

문자열의 최대길이는 50이라 고려안해도 된다.

2. 수도코드

1) toLowerCase / toUpperCase를 이용해 같은 대/소문자 형태로 만들어준다.
2) for문을 이용해 각 문자의 개수를 세어준다.3) 세어준 두 값을 비교해서 같으면 return true 다르면 return false

✅ 정답코드

class Solution {
    boolean solution(String s) {
        s = s.toLowerCase();
        
        int pNum =0, yNum =0;
        for (char c : s.toCharArray()){
            if (c == 'p') pNum++;
            else if (c == 'y') yNum++;
            
        }
        if (pNum == yNum) return true;
        else return false;
    }
}

 


 

✅ 문제를 풀기 위해 새롭게 학습한 것


공부하려고 사람들에게 추천을 적당히 받은 코드를 가져왔다!
(더 추천을 많이 받은 코드도 있지만 공부하는데 시간이 많이 걸릴것 같아서..)

class Solution {
    boolean solution(String s) {

        return s.replaceAll("[^yY]", "").length() - s.replaceAll("[^pP]", "").length() == 0 ? true : false;
    }
}

아래 내용을 학습하고 오면 이 코드를 해석할 수 있다.

해석한 내용

더보기
s.replaceAll("[^yY]", "").length()
s라는 문자열을 replaceAll을 사용해 치환한다.
[^yY]는 정규표현식인데, ^는 부정을 의미 -- 즉 y나 Y가 아닌 모든 문자를 ""로 치환한다.
그럼 y나 Y만 남을것이고, 그 개수를 .length()메소드를 이용해 세어준다.

 

s.replaceAll("[^pP]", "").length()

마찬가지로 p와 P에 대해서도 개수를 세어준다.

 

s.replaceAll("[^yY]", "").length() - s.replaceAll("[^pP]", "").length() == 0 ? true : false;

삼항 연산자를 사용했다. 🔵 삼항 연산자   (조건식)? true:false 위에서 계산한 두 길이 값을 서로 빼준 값이 0 이면 true 리턴, 아니면 false를 리턴한다.

 

 

 

⏺ replace()


대상 문자열을 원하는 문자값으로 변환하는 함수
target : 변환하고자 하는 대상이 될 문자열
replacement : 변환할 문자 값

인자값의 형태 : CharSequence

String replace(CharSequence target, CharSequence replacement)


예제

String replaceTest = "심규선-소로 노래 좋아!";
System.out.println( replaceTest.replace("심규선-소로","이찬혁-파노라마"));

 

⏺ replaceAll()

replace와 기능이 같다.
regex : 변환하고자 하는 대상이 될 문자열 ( 정규표현식을 의미한다)
replacement : 변환할 문자 값

인자값의 형태 : String

*즉 replaceAll은 정규식을 이용해 문자열을 대체한다.

 String replaceAll(String regex, String replacement)
String allTest = "aaabbbvccacfgdracabtghd";
System.out.println( allTest.replace("ab","0") );
//  aa0bbvccacfgdrac0tghd

System.out.println( allTest.replaceAll("[ab]","0") );
//  000000vcc0cfgdr0c00tghd


정규표현식 [ab] 를 써서 a나 b는 전부 0으로 바꿔주면, 결과가 이렇게 나온다.
aaabbbvccacfgdracabtghd → 000000vcc0cfgdr0c00tghd

 

⏺ replaceFirst()

사용법은 replaceAll과 같지만, 처음 나오는 단어를 찾아서 바꿔줌

 String replaceFirst(String regex, String replacement)







references
https://mine-it-record.tistory.com/127