https://school.programmers.co.kr/learn/courses/30/lessons/12916
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
![](https://blog.kakaocdn.net/dn/VouT1/btrGPJXRQ2v/wwQkJjolJWrBiG6zEjFi90/img.png)
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한사항
- 문자열 s의 길이 : 50 이하의 자연수
- 문자열 s는 알파벳으로만 이루어져 있습니다.
발상
문자열에서 원하는 문자를 추출하고 숫자를 세서 비교하는 문제이다.
문자를 가공하는 방법은 여러가지가 있는데 char배열로 변환하여 가공, 정규식, 스트림, String 함수 등 여러 방법을 쓸 수 있다.
스트림을 사용해서 한번 풀고, 최적화를 위하여 정규식을 사용해서 한번 더 풀어보았다.
의사코드
스트림
1. 소문자변환-> char스트림 생성 -> 필터링 -> 숫자세기
2. 숫자 비교
정규식
1. 제외 패턴작성
2. 문자열 가공
3. 가공된 문자열 검사{
1. 문자가 p이면 count ++
2. p가 아니면 count --
}
4. count가 0이면 true, 아니면 false
개선
스트림을 사용하면 가독성이 좋지만 일반적인 반복문이나 정규식등을 사용하였을 때랑 성능이 체감상 10배정도 나는 것 같다.
복잡한 데이터소스가 아닌 이상 간단한 가공은 for 반복문으로 처리하는 것이 속도의 관점에선 더 나은 선택인 것 같다.
'IT > Algorithm' 카테고리의 다른 글
[programmers] 3진법 뒤집기 (0) | 2022.07.10 |
---|---|
[programmers] 크레인 인형뽑기 게임 (0) | 2022.07.08 |
[programmers] 문자열 다루기 기본 (0) | 2022.07.08 |
[programmers] 수박수박수박수박수박수 (0) | 2022.07.08 |
[programmers] 소수 찾기 (0) | 2022.07.08 |