-
13. 문자열 내 p와 y의 개수코딩 테스트/Level 1 2019. 10. 11. 20:26반응형
https://programmers.co.kr/learn/courses/30/lessons/12916
파이썬
정석적인 풀이.
if in 튜플 부분이 파이써닉합니다.
def solution(s): p_count, y_count = 0, 0 for each in s: if each in ('p', 'P'): p_count += 1 elif each in ('y', 'Y'): y_count += 1 return p_count == y_count
테스트 1 〉 통과 (0.00ms, 10.1MB) 테스트 2 〉 통과 (0.00ms, 10.1MB) 테스트 3 〉 통과 (0.00ms, 10.3MB) 테스트 4 〉 통과 (0.00ms, 10.2MB) 테스트 5 〉 통과 (0.00ms, 10.2MB) 테스트 6 〉 통과 (0.01ms, 10.1MB) 테스트 7 〉 통과 (0.01ms, 10.1MB) 테스트 8 〉 통과 (0.01ms, 10.2MB) 테스트 9 〉 통과 (0.01ms, 10.3MB) 테스트 10 〉 통과 (0.01ms, 10.2MB) 테스트 11 〉 통과 (0.01ms, 10.1MB) 테스트 12 〉 통과 (0.01ms, 10.1MB) 테스트 13 〉 통과 (0.01ms, 10.1MB) 테스트 14 〉 통과 (0.01ms, 10.2MB) 테스트 15 〉 통과 (0.01ms, 10.2MB) 테스트 16 〉 통과 (0.01ms, 10.2MB) 테스트 17 〉 통과 (0.01ms, 10.2MB) 테스트 18 〉 통과 (0.01ms, 10.1MB) 테스트 19 〉 통과 (0.01ms, 10.1MB) 테스트 20 〉 통과 (0.01ms, 10.1MB) 테스트 21 〉 통과 (0.01ms, 10.1MB) 테스트 22 〉 통과 (0.01ms, 10.2MB) 테스트 23 〉 통과 (0.01ms, 10.2MB) 테스트 24 〉 통과 (0.01ms, 10.3MB) 테스트 25 〉 통과 (0.01ms, 10.3MB) 테스트 26 〉 통과 (0.01ms, 10.2MB) 테스트 27 〉 통과 (0.01ms, 10.1MB) 테스트 28 〉 통과 (0.01ms, 10.3MB) 테스트 29 〉 통과 (0.00ms, 10.1MB) 테스트 30 〉 통과 (0.01ms, 10.2MB)
한 줄로 할 수 있는 건 한 줄로...
count 메서드를 쓸 때마다 s 문자열을 1번씩 순환합니다.
아래 코드는 총 4회의 순환을 하기 때문에
'일반적인 관점'에서 좋은 코드는 아닙니다.벤치마크로는 가장 빠릅니다만.....def solution(s): return s.count('p') + s.count('P') == s.count('y') + s.count('Y')
테스트 1 〉 통과 (0.00ms, 10.1MB) 테스트 2 〉 통과 (0.00ms, 10.3MB) 테스트 3 〉 통과 (0.00ms, 10.2MB) 테스트 4 〉 통과 (0.01ms, 10.3MB) 테스트 5 〉 통과 (0.00ms, 10.1MB) 테스트 6 〉 통과 (0.00ms, 10.1MB) 테스트 7 〉 통과 (0.00ms, 10MB) 테스트 8 〉 통과 (0.00ms, 10.1MB) 테스트 9 〉 통과 (0.00ms, 10.1MB) 테스트 10 〉 통과 (0.00ms, 10.1MB) 테스트 11 〉 통과 (0.00ms, 10.1MB) 테스트 12 〉 통과 (0.00ms, 10MB) 테스트 13 〉 통과 (0.00ms, 10.2MB) 테스트 14 〉 통과 (0.00ms, 10.2MB) 테스트 15 〉 통과 (0.00ms, 10.1MB) 테스트 16 〉 통과 (0.00ms, 9.94MB) 테스트 17 〉 통과 (0.00ms, 10.2MB) 테스트 18 〉 통과 (0.00ms, 10.1MB) 테스트 19 〉 통과 (0.00ms, 10.3MB) 테스트 20 〉 통과 (0.00ms, 10MB) 테스트 21 〉 통과 (0.00ms, 10.2MB) 테스트 22 〉 통과 (0.00ms, 10.1MB) 테스트 23 〉 통과 (0.00ms, 10.1MB) 테스트 24 〉 통과 (0.00ms, 10.3MB) 테스트 25 〉 통과 (0.00ms, 10.2MB) 테스트 26 〉 통과 (0.00ms, 10.1MB) 테스트 27 〉 통과 (0.00ms, 10.1MB) 테스트 28 〉 통과 (0.00ms, 10.1MB) 테스트 29 〉 통과 (0.00ms, 10.1MB) 테스트 30 〉 통과 (0.00ms, 10.3MB)
2회의 반복입니다.
def solution(s): return len([each for each in s if each in ('p', 'P')]) == len([each for each in s if each in ('y', 'Y')])
테스트 1 〉 통과 (0.00ms, 10.1MB) 테스트 2 〉 통과 (0.01ms, 10.1MB) 테스트 3 〉 통과 (0.00ms, 10.1MB) 테스트 4 〉 통과 (0.01ms, 9.96MB) 테스트 5 〉 통과 (0.01ms, 10.2MB) 테스트 6 〉 통과 (0.01ms, 10.1MB) 테스트 7 〉 통과 (0.01ms, 10.2MB) 테스트 8 〉 통과 (0.02ms, 10.1MB) 테스트 9 〉 통과 (0.02ms, 10.2MB) 테스트 10 〉 통과 (0.02ms, 10.1MB) 테스트 11 〉 통과 (0.02ms, 10.1MB) 테스트 12 〉 통과 (0.01ms, 10.1MB) 테스트 13 〉 통과 (0.01ms, 10.2MB) 테스트 14 〉 통과 (0.01ms, 10.3MB) 테스트 15 〉 통과 (0.01ms, 10.1MB) 테스트 16 〉 통과 (0.01ms, 10.2MB) 테스트 17 〉 통과 (0.02ms, 10.1MB) 테스트 18 〉 통과 (0.01ms, 10.1MB) 테스트 19 〉 통과 (0.02ms, 10.1MB) 테스트 20 〉 통과 (0.01ms, 10.1MB) 테스트 21 〉 통과 (0.01ms, 10.2MB) 테스트 22 〉 통과 (0.01ms, 10.2MB) 테스트 23 〉 통과 (0.01ms, 9.95MB) 테스트 24 〉 통과 (0.01ms, 10.1MB) 테스트 25 〉 통과 (0.01ms, 10.1MB) 테스트 26 〉 통과 (0.02ms, 10.1MB) 테스트 27 〉 통과 (0.01ms, 10.2MB) 테스트 28 〉 통과 (0.01ms, 10.3MB) 테스트 29 〉 통과 (0.00ms, 10.1MB) 테스트 30 〉 통과 (0.01ms, 10.3MB)
정규식을 이용, 2회 반복입니다.
https://wikidocs.net/4308import re def solution(s): return len(re.findall(r'[pP]', s)) == len(re.findall(r'[yY]', s))
속도도 그닥...
테스트 1 〉 통과 (0.10ms, 10.1MB) 테스트 2 〉 통과 (0.10ms, 10.2MB) 테스트 3 〉 통과 (0.10ms, 10.1MB) 테스트 4 〉 통과 (0.10ms, 10.3MB) 테스트 5 〉 통과 (0.14ms, 10MB) 테스트 6 〉 통과 (0.10ms, 10MB) 테스트 7 〉 통과 (0.10ms, 10.3MB) 테스트 8 〉 통과 (0.12ms, 10.2MB) 테스트 9 〉 통과 (0.10ms, 10.1MB) 테스트 10 〉 통과 (0.11ms, 10.1MB) 테스트 11 〉 통과 (0.10ms, 10.2MB) 테스트 12 〉 통과 (0.13ms, 10.3MB) 테스트 13 〉 통과 (0.10ms, 10.2MB) 테스트 14 〉 통과 (0.10ms, 10.1MB) 테스트 15 〉 통과 (0.10ms, 10.2MB) 테스트 16 〉 통과 (0.10ms, 10.1MB) 테스트 17 〉 통과 (0.19ms, 10.1MB) 테스트 18 〉 통과 (0.20ms, 10.2MB) 테스트 19 〉 통과 (0.10ms, 10.3MB) 테스트 20 〉 통과 (0.10ms, 10.2MB) 테스트 21 〉 통과 (0.10ms, 10.2MB) 테스트 22 〉 통과 (0.10ms, 10.1MB) 테스트 23 〉 통과 (0.13ms, 10.3MB) 테스트 24 〉 통과 (0.10ms, 10.2MB) 테스트 25 〉 통과 (0.10ms, 10.1MB) 테스트 26 〉 통과 (0.10ms, 10.3MB) 테스트 27 〉 통과 (0.15ms, 10.3MB) 테스트 28 〉 통과 (0.10ms, 10.1MB) 테스트 29 〉 통과 (0.09ms, 10.1MB) 테스트 30 〉 통과 (0.10ms, 10.2MB)
컴파일 옵션을 이용해도 되죠.
IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 한다.
옵션을 사용할 때는 re.DOTALL처럼 전체 옵션 이름을 써도 되고 re.S처럼 약어를 써도 된다.import re def solution(s): return len(re.findall('p', s, re.I)) == len(re.findall('y', s, re.I))
컴파일 옵션(re.I)을 이용하면 조금 더 빠르군요.
테스트 1 〉 통과 (0.07ms, 10.3MB) 테스트 2 〉 통과 (0.10ms, 10.1MB) 테스트 3 〉 통과 (0.07ms, 10.3MB) 테스트 4 〉 통과 (0.07ms, 10.2MB) 테스트 5 〉 통과 (0.07ms, 10.2MB) 테스트 6 〉 통과 (0.08ms, 10.2MB) 테스트 7 〉 통과 (0.08ms, 10.2MB) 테스트 8 〉 통과 (0.08ms, 10.1MB) 테스트 9 〉 통과 (0.10ms, 10.2MB) 테스트 10 〉 통과 (0.08ms, 10.1MB) 테스트 11 〉 통과 (0.08ms, 10.2MB) 테스트 12 〉 통과 (0.08ms, 10.3MB) 테스트 13 〉 통과 (0.11ms, 10.2MB) 테스트 14 〉 통과 (0.08ms, 10.2MB) 테스트 15 〉 통과 (0.08ms, 10.2MB) 테스트 16 〉 통과 (0.08ms, 10.2MB) 테스트 17 〉 통과 (0.09ms, 10.3MB) 테스트 18 〉 통과 (0.11ms, 10.3MB) 테스트 19 〉 통과 (0.11ms, 10.2MB) 테스트 20 〉 통과 (0.08ms, 10.2MB) 테스트 21 〉 통과 (0.10ms, 10.2MB) 테스트 22 〉 통과 (0.11ms, 10.2MB) 테스트 23 〉 통과 (0.10ms, 10.1MB) 테스트 24 〉 통과 (0.08ms, 10.2MB) 테스트 25 〉 통과 (0.08ms, 10.3MB) 테스트 26 〉 통과 (0.11ms, 10.2MB) 테스트 27 〉 통과 (0.08ms, 10.3MB) 테스트 28 〉 통과 (0.08ms, 10.2MB) 테스트 29 〉 통과 (0.10ms, 10.3MB) 테스트 30 〉 통과 (0.09ms, 10.2MB)
자바스크립트
정규식 이용
function solution(s){ return (s.match(/p/gi) || []).length == (s.match(/y/gi) || []).length }
자바
정석적입니다. 제가 for each 문을 좋아해서..
class Solution { boolean solution(String s) { int p_num = 0, y_num = 0; for (String each : s.split("")) { if (each.equals("p") || each.equals("P")) p_num++; else if (each.equals("y") || each.equals("Y")) y_num++; } return p_num == y_num; } }
golang
func solution(s string) bool { var pNum, yNum int for _, r := range s { if r == 'p' || r == 'P' { pNum++ } else if r == 'y' || r == 'Y' { yNum++ } } return yNum == pNum }
반응형