[백준] 13022 : 늑대와 올바른 단어 Python/파이썬 풀이

2022. 11. 4. 15:13·Algorithm (PS)
728x90

https://www.acmicpc.net/problem/13022

 

13022번: 늑대와 올바른 단어

첫째 줄에 단어가 주어진다. 단어는 w, o, l, f로만 이루어져 있으며, 길이는 50을 넘지 않는다.

www.acmicpc.net

.... 광광 

 

하 엄청난 삽질 후에 풀었다 

반례를 빠르게 찾아내서 예외케이스를 처리해주는게 중요한 문자열 패턴 문제이다.. 

1. f를 기준으로 문자열을 잘라서 검사한다  ex) wolfwolf -> [wolf, wolf]

2. 자른 문자열의 w, o, l, f 알파벳 개수를 세서 각각 알파벳 개수가 동일한지 확인한다. 

3. 동일하다면 정규표현식을 사용해서 w+o+l+f (w,o,l,f가 각각 한번 이상 등장하고 순서대로 등장하는지 확인)를 확인해준다. 

4. 그런데 이렇게 했을 때 처리가 안되는 반례가 하나 있다 -> ex) wwoollffwol 

f를 기준으로 잘랐을 때 wwoollff 까지만 짤리고 그 이후의 chunk에 대해서 확인 불가이므로, f로 끝나지 않는 경우 모두 false 를 return 해주어야 한다. 

if wold[-1] != 'f' : return 0

딱히 유명한 문제도 아니고 맘에드는 (?) 풀이도 별로 안나오고 해서 직접 풀었는뎅
엣지테스트케이스를 처리해주어야 해서 삽질을 오래한 문제이다 ㅎㅎ.. 

전체 코드는 다음과 같다.

# 13022
import re
word = input()
flag = True
n = len(word)
pattern = re.compile("w+o+l+f+") # + 해당 패턴이 하나 이상
# 1. f를 기준으로 나누기
# 반례 : wwoollffwol
def check(word):
    index = [-1]
    if len(word) < 4:
        return 0
    if word[-1] != 'f':
        return 0
    for i in range(n):
        if word[i] == 'f' and (i == n-1 or word[i+1] != 'f'):
            index.append(i)
    for i in range(len(index)-1):
        if i != len(index)-1:
            # chunk 는 맨 끝 f가 나올때마다 나눈 것임
            chunk = word[index[i]+1:index[i+1]+1]
            if chunk.count('w') == chunk.count('o') == chunk.count('l') == chunk.count('f'):
                if pattern.match(word):
                    continue
                else:
                    return 0
            else:
                return 0
    return 1
print(check(word))

 

728x90

'Algorithm (PS)' 카테고리의 다른 글

[프로그래머스] 여행경로 Python (파이썬)  (0) 2022.11.09
[백준] 15927 파이썬 - 회문은 회문아니야!!  (0) 2022.11.05
[백준] 2470 두 용액 파이썬  (0) 2022.10.30
[백준] 2615 오목 Python  (0) 2022.10.27
[백준] 5972 택배배송 Python  (0) 2022.10.26
'Algorithm (PS)' 카테고리의 다른 글
  • [프로그래머스] 여행경로 Python (파이썬)
  • [백준] 15927 파이썬 - 회문은 회문아니야!!
  • [백준] 2470 두 용액 파이썬
  • [백준] 2615 오목 Python
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • AWS
  • 운영체제
  • 카카오코딩테스트
  • docker
  • 백트래킹
  • BFS
  • 데이터엔지니어
  • 코딩테스트
  • Kubernetes
  • Databricks
  • 프로그래머스
  • 백준
  • 스파크
  • 리눅스
  • EC2
  • Leetcode
  • python
  • ansible
  • 쿠버네티스
  • SPARK
  • linux
  • 클라우드
  • 데이터엔지니어링
  • 빅데이터
  • 파이썬
  • 알고리즘
  • 데이터브릭스
  • dp
  • dfs
  • Swift

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준] 13022 : 늑대와 올바른 단어 Python/파이썬 풀이
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.