-
[Python] BOJ 3986 : 좋은 단어코딩테스트/백준 2024. 10. 23. 08:08
https://studyiwthme.tistory.com/176 <- 균형 잡힌 세상이랑 상당히 유사하다.
https://www.acmicpc.net/problem/3986 <- 문제를 풀기 위해선 여기를 보면 된다.
생각해보기
- 좋은 단어란? 선끼리 교차하지 않으면서 각 글자를 정확히 한 개의 다른 위치에 있는 같은 글자와 짝을 지을 수 있다면..
- 무슨 말이야
- 아치형 곡선? 포물선?
- 단어의 수 -> 사용자로부터 받은 입력의 개수 즉, 라인의 개수
- gpt한테 요구사항 분석 -> 서로 인접한 같은 문자가 있으면, 그 두문자를 제거.
- 위 과정을 반복하여 모든 문자가 제거될 수 있으면 좋은 단어
요구사항
- 시간 제한 1초 O(n*m) 정도이고 N은 100이하 M은 100,000 충분충분..
- 메모리 제한 256MB 넉넉하시다.
- 서로 인접한 같은 문자가 있으면 그 두 문자를 제거한 후 모든 문자가 제거된 문자열의 개수를 출력해라.
설계 1
- 사실 균형 잡힌 세상과 상당히 유사하다. 만약 안 풀어봤으면 풀고 풀든 풀고 오든 하면 연습이 됐다.
- 아래는 사용자 정의 함수입니다.
- 스택을 사용한다.
- for문에 문자열을 돌린다.
- stack이 비어 있으면 문자열을 넣는다.
- 그렇지 않으면 스택의 상단과 비교해서 같은 문자이면 stack을 pop 한다.
- 스택이 남아 있을 경우 return 0 그렇지 않을 시 return 1 을 한다.
- main은
- 입력 받은 N만큼 for문을 돌린다.
- line = input() 문자열을 입력 받고
- result += 사용자정의함수(line)
- 결과값을 출력한다.
- 입력 받은 N만큼 for문을 돌린다.
구현 1
import sys input = lambda: sys.stdin.readline().rstrip() def is_good(s): stack = [] for char in s: if not stack: stack.append(char) elif char =='A': if stack[-1] == 'A': stack.pop() elif char == 'B': if stack[-1] == 'B': stack.pop() if stack: return 0 else: return 1 N = int(input()) result = 0 for _ in range(N): line = input() result += is_good(line) print(result)
- 위 경우 백준에서 실패했다고 나온다.
- 테스트 케이스를 여러 개 해보았는 데 잘 되는 거 같은 데... 안된다
- 처음에 gpt 한테 물어보니깐 맞다고 하더니
- 틀렸습니다 나온다고 했더니 고쳐 주었는 데 아직 나도 잘 모르겠다. 혹시 아시는 분 있으면 댓글 부탁드립니다.
구현 2
import sys input = lambda: sys.stdin.readline().rstrip() def is_good(s): stack = [] for char in s: if stack and stack[-1] == char: # 스택의 최상단과 같은 문자가 있으면 pop stack.pop() else: # 그렇지 않으면 스택에 push stack.append(char) # 스택이 비어있으면 좋은 단어 (모든 문자가 짝을 이룸) return 1 if not stack else 0 N = int(input()) # 입력 문자열의 개수 result = 0 for _ in range(N): line = input() result += is_good(line) print(result)
'코딩테스트 > 백준' 카테고리의 다른 글
[Python] BOJ 2504 괄호의 값 (0) 2024.10.28 [Python] BOJ 10799 : 쇠막대기 (0) 2024.10.24 [Python] BOJ 4949 : 균형잡힌 세상 (0) 2024.10.22 [Python] BOJ 10845 큐 (0) 2024.10.21 [Python] BOJ 17298 : 오큰수 (0) 2024.10.19 - 좋은 단어란? 선끼리 교차하지 않으면서 각 글자를 정확히 한 개의 다른 위치에 있는 같은 글자와 짝을 지을 수 있다면..