코딩 테스트/leetCode

[leetCode] 2315. Count Asterisks (Python)

우주바다 2022. 11. 1. 22:15
728x90

▼ 문제 바로가기 (링크) 

https://leetcode.com/problems/count-asterisks/

 

Count Asterisks - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


* 또는 | 을 포함하거나, 포함하지 않는 문자열 s가 주어질 때,
* 의 개수를 반환하는 문제.

| (vertical bars)는 짝수 개로 존재한다.
* (Asterisk) 를 셀 때 bars pair의 사이에 있는 것은 제외한다.

# 첫번째 테스트 케이스만 고려

class Solution:
    def countAsterisks(self, s: str) -> int:   
        s = s.split("|")
        del s[1::2]  
        s = ''.join(s)
        
        cnt = 0 
        for i in s:
            if i == "*":
                cnt += 1
        return cnt

우선 | 기준으로 분리해 저장한 리스트의 원소를

1번부터 홀수 번째 인덱스만 삭제했다. ( 버티컬 바 사이의 원소)

남은 원소를 str로 join하고 *의 개수를 세서 반환했다.

 

단, "|" 가 문자열의 0번째 인덱스로 시작하는 경우는

인덱스 슬라이싱을 0부터 해야하므로 제출 전 분기처리를 추가했다.


# test case : "|uar|e**|be***au|"

class Solution:
    def countAsterisks(self, s: str) -> int:   
        s = s.split("|")
        
        if s[0] != "|":
            del s[1::2]  # 1번부터 홀수 인덱스
        else :
            del s[0::2] # 0번부터 짝수 인덱스
        s = ''.join(s)
        
        cnt = 0 
        for i in s:
            if i == "*":
                cnt += 1
        return cnt

임의로 직접 만든 테스트 케이스를 추가해서 만든 최종코드.

예시에 없었는데 미리 예상하고 예외처리 해본 건 처음이라 뿌듯하다.

이전에는 주어진 케이스만 돌아가면 신나서 제출했는데

더 신중하게 답을 맞추는 습관을 들이고 있다.

728x90
반응형