Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- static final
- nodejs
- 알고리즘
- SWEA
- DFS
- 백준 2667
- 노드프로젝트
- 앱개발
- springboot
- 백준
- Java
- 코테
- 파이썬
- 깊이우선탐색
- 1260
- 이메일인증
- 자바
- 노드개발
- 코딩테스트
- 브실이의입시전략
- 프로그래머스
- 노드개발자
- BFS
- 실버5
- Gmail인증
- email인증
- 쪽지기능
- Python
- 코딩
- 너비우선탐색
Archives
- Today
- Total
데옹의 블로그
[SWEA] 19003. 펠린드롬 문제(D3) 본문
첨에 문제 제대로 안 읽고 풀다가 '이렇게 쉬운 문제라고..?' 해서 다시 푼 문제입니당.
다시 풀어도 좀 쉽긴 했어요.
조건을 몇 개 생각해보니 바로 풀릴 것 같아 작성했습니다.
조건은..
- 문자열이 들어왔을 때, 펠린드롬이 2개 이상이면 1개만 사용 가능하다는 것
- 즉, 이 말은 문제 안에 팰린드롬 문자열이 하나라도 있는지만 보면 된다는 것입니다.
- 펠린드롬이 아닌 것들을 모아놨을 때, 그 중에 반대로 뒤집었을 때 맞는 것이 없으면 걍 빼도 된다는 것
- 예를 들어 'abb', 'cbs', 'dsa', 'bba' 가 있으면 'abb', 'bba'만 남겨도 됩니다.
- 펠린드롬을 모아놓은 리스트를 A, 아닌 것을 모아놓은 리스트를 B라고 할 때, 어차피 A는 많아도 하나만 사용이 가능할 것이고.. B는 `조건2`를 제외했을 때 남은 것들의 길이와 요소의 개수를 곱하면 되지 않을까
라고 일단은 생각을 했습니다.
그리고 맞았죠 ㅋ 근데 블로그 잘 안 쓰는데 이거 풀이가 없는 것 같길래 걍 썼습니다.
그냥 밑으로 내려가면서 보시면 이해가 될 것이라 생각합니다.
좀 급하게 쓰긴 했지만 잘 봐주세요 ㅠ
TC = int(input())
for tc in range(1,TC+1):
N, M = map(int,input().split())
# 정답은 어떻게 될 지 모르겠더라고요. 그래서 0으로 해뒀습니다.
# cnt는 나중에 씁니다.
answer = cnt = 0
# 팰린드롬 문자열이 있느냐 없느냐만 중요합니다.
palindrome = False
# 팰린드롬 문자열이 아닐 경우를 저장하는 리스트입니다.
isNot = []
# 이 곳에선 문자열을 받자마자 팰린드롬인지 판별합니다.
# 만약 팰린드롬이 아니라면 isNot으로, 팰린드롬이면 그냥 True로 값을 바꿔줍니다.
for _ in range(N):
a = input().rstrip()
if a != a[::-1]:
isNot.append(a)
else:
palindrome = True
# 여기선 isNot 리스트에 있는 문자열들을 걸러내고 cnt를 추가해줄겁니다.
# 어차피 반대로 했을 때 맞는 요소가 있으면 한 쌍이라는 거니까 걍 2를 추가해줬습니다.
for _ in range(len(isNot)):
temp = isNot.pop()
if temp[::-1] in isNot:
cnt += 2
## 여기까지의 과정을 다 거치면 isNot에는 조건을 충족한 것들만 남고,
## palindrome은 True 혹은 False가 되겠죠
# 만약 걸러낸 짝이 'ab', 'ba' 였다면 cnt는 2였을테고, 'abba', 'baab' 둘 다
# 문자열 길이가 4입니다. ( cnt(2) * M(2) = 4 )
answer = cnt*M
# 만약 palindrome이 True라면 가운데 들어갈 수 있겠습니다.
# 위의 예시대로라면 M은 2였을테니 palindrome이 'cc'였다면 'abccba'가 되겠죠.
# 어차피 하나만 들어갈 수 있으니 M의 값을 한 번만 추가해줍니다.
if palindrome:
answer += M
print(f'#{tc} {answer}')
'python' 카테고리의 다른 글
[Python] 프로그래머스 - 공원 산책 [level 1] (0) | 2024.01.12 |
---|---|
[Python] 프로그래머스 - 튜플 (level 2) (2) | 2023.11.09 |
[Python/파이썬] 백준 2667 : 단지번호붙이기 (+ 전 코드 리뷰) (0) | 2023.06.19 |
[Python/파이썬] 백준 2606 : 바이러스 (0) | 2023.06.18 |
[Python/파이썬] 백준 1260 : DFS와 BFS (0) | 2023.06.17 |