일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++
- 프로그래머스
- 알고리즘
- softeer
- 시나공
- 백준알고리즘
- 코틀린
- 문제풀이
- 데이터베이스
- kotlin
- 백준
- 1과목
- BFS
- 공부일지
- CJ UNIT
- SQL
- 코딩교육봉사
- SW봉사
- 소프티어
- 코딩봉사
- java
- 스프링
- 자바
- programmers
- python
- 백준 알고리즘
- 정보처리산업기사
- 파이썬
- MYSQL
- 회고
- Today
- Total
JIE0025
[프로그래머스][lv.1] 문자열 내 p와 y의 개수 - 자바(Java) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12916
프로그래머스 > 연습문제 > 문자열 내 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]는 정규표현식인데, ^는 부정을 의미 -- 즉 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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[코딩테스트입문][lv.0] 최대값 만들기(1) - 자바(Java) (0) | 2022.11.23 |
---|---|
[코딩테스트입문][lv.0] 문자열뒤집기 - 자바(Java) (0) | 2022.11.22 |
[프로그래머스][lv.1] 평균구하기 - 자바(Java) (0) | 2022.11.01 |
[프로그래머스] 그래프 _ 가장 먼 노드 (파이썬, level3) (0) | 2022.05.27 |
[프로그래머스] 이분탐색 _ 입국심사 (파이썬, level3) (0) | 2022.05.27 |