-
프로그래머스-문자열 내 p와 y의 개수히딘쓰의 책상/└ java 2020. 12. 16. 01:50
오늘은 자바로 코딩테스트 문제를 풀어보았다!

바로 문자열 내에서 p 와 y의 개수에 따라 true 나 false의 값을 반환해주는 문제였다.
처음 생각은 대문자와 소문자를 구별하지 않는 다고 해서
문자열을 받은 후에 전부 소문자로 바꿔주고 그 다음 처리를 하려고 했다.
그런데 다음과 같이 코드를 짯는데 51점을 받고 실패ㅜㅜ
class Solution { boolean solution(String s) { boolean answer = true; String str = s; int pcnt=0, ycnt=0; String[] splitStr = str.split(""); str = str.toLowerCase(); for(int i=0; i<splitStr.length; i++){ if(splitStr[i].equals("p")){ pcnt++; }else if(splitStr[i].equals("y")){ ycnt++; } } if(pcnt!=ycnt){ answer=false; } return answer; } }그래서 뭐가 문제인지 생각하다가 그냥 소문자로 바꿔주지 않고
아래처럼 p,y이거나 P,Y일 때 카운트를 해주면 어떨까 하고 바꾼 결과 통과! 정답!
아! 그리고
String str = s;
도 굳이 필요없는 것 같아 지워주었다!
class Solution { boolean solution(String s) { boolean answer = true; int pcnt=0, ycnt=0; String[] splitStr = s.split(""); //문자열을 소문자로 바꿔주는 부분 주석처리 //s = s.toLowerCase(); for(int i=0; i<splitStr.length; i++){ if(splitStr[i].equals("p") || splitStr[i].equals("P")){ pcnt++; }else if(splitStr[i].equals("y") || splitStr[i].equals("Y")){ ycnt++; } } if(pcnt!=ycnt){ answer=false; } return answer; } }그런데 처음 코드도 틀릴 이유가 없다고 생각해서 한줄 한줄 다시 보다가 나의 실수를 깨닳았다!
처음 코드는 str을 split 해주고 splitStr에 넣어준 ★후에★ 애꿎은 str만 소문자로 변경해주었던 것이었다............
splitStr을 선언한 ★이후에★ str을 소문자로 변경하면 뭐해.................. 나 뭐해..........
그래서 선언 위치를 변경했더니 이것도 정답으로 뜬다!
하지만 내 느낌상 바로 위 코드보단 시간이 더 걸리는 느낌?
소문자로 다 바꿔주는 걸 한 번 더 거치기 때문인 것 같다!
class Solution { boolean solution(String s) { boolean answer = true; int pcnt=0, ycnt=0; s = s.toLowerCase(); //splitStr의 선언 위치 변경! String[] splitStr = s.split(""); for(int i=0; i<splitStr.length; i++){ if(splitStr[i].equals("p")){ pcnt++; }else if(splitStr[i].equals("y")){ ycnt++; } } if(pcnt!=ycnt){ answer=false; } return answer; } }그리고 대망의 다른 사람들 풀이..!
람다식으로 정말 한두줄로 완성한 사람도 있고, split()을 사용하지 않고
charAt()을 사용한 사람도 있었다.
charAt()을 사용하면 splitStr 처럼 따로 또 변수 선언을 안해줘도 되규..
split()을 사용하지만 더 짧게 끝낸 사람도 있규..
아래는 charAt()을 사용해서 풀어본 코드다! 이방법 저방법 다써보쟈~~~~
class Solution { boolean solution(String s) { boolean answer = true; int pcnt=0, ycnt=0; for(int i=0; i<s.length(); i++){ if(s.charAt(i) =='p' || s.charAt(i) =='P'){ pcnt++; }else if(s.charAt(i) =='y' || s.charAt(i) =='Y'){ ycnt++; } } if(pcnt!=ycnt){ answer=false; } return answer; } }와 이렇게 짯더니 통과 하는 시간대가 다 0.0몇ms대였다!
그 전전꺼는 0.1-0.3ms대 였고 그 전꺼는 그 이상인 경우도 있었는데....
큽
코딩은 정말이지 같은 문제여도 정말 정답이 다양하게 나오는 것 같다!
하지만 어떻게든 일을? 더 적게 하면서 얼마나 효율적으로 짜느냐는 사람마다 다른 것 같다ㅜㅜㅜㅜㅜ
나도 조금씩 더 짧고 효율적인 코드를 짜기 위해 노력해야지! 빠샤~!
'히딘쓰의 책상 > └ java' 카테고리의 다른 글
프로그래머스-옷가게 할인받기를 풀다가 복합할당연산자의 자동형변환에 대해서 알아본 이야기 *-* (0) 2023.07.13 프로그래머스-가운데 글자 가져오기 (0) 2020.12.07