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 | 31 |
Tags
- javascript
- 동적계획법
- select
- 소프티어
- 자바스크립트
- 너비 우선 탐색
- Lv. 0
- DP
- Lv. 2
- dfs
- Lv. 3
- 파이썬
- C언어
- level 3
- Dynamic Programming
- Lv. 1
- group by
- join
- 깊이 우선 탐색
- SQL 고득점 KIT
- 프로그래머스
- 오블완
- bfs
- programmers
- softeer
- SQL
- 티스토리챌린지
- Python
- LEVEL 2
- Java
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
코드트리 | HashMap / 순서를 바꾸었을 때 같은 단어 그룹화하기 {언어 : Python} [가장 작은 시공간복잡도] 본문
알고리즘/풀었지만 다시 보기
코드트리 | HashMap / 순서를 바꾸었을 때 같은 단어 그룹화하기 {언어 : Python} [가장 작은 시공간복잡도]
스위태니 2025. 1. 17. 17:09문제 링크
https://www.codetree.ai/trails/complete/curated-cards/challenge-group-same-word/description
정답 코드
import sys
input = sys.stdin.readline
n = int(input())
words = [input().strip() for _ in range(n)]
# Write your code here!
asciiDict = dict()
def makeKeys(word):
tmpArr = [0] * 52 # 앞 26개는 대문자 뒤 26개는 소문자
for w in word:
ascii = ord(w)
if ascii < 97:
tmpArr[ascii-65] += 1
else:
tmpArr[ascii-71] += 1
return "".join(map(str, tmpArr))
for word in words:
asciiKey = makeKeys(word)
if asciiKey in asciiDict:
asciiDict[asciiKey] += 1
else:
asciiDict[asciiKey] = 1
maxCnt = max(list(asciiDict.values()))
print(maxCnt)
풀이 방법
- ascii 코드를 활용해서 길이가 52인 문자열로 된 키를 만든다.
- 대문자는 65 ~ 90
- 소문자는 97 ~ 122
- 대문자는 앞에 0 ~ 25인덱스에 저장
- 소문자는 뒤에 26 ~ 51인덱스에 저장
- "AZABacaz"라면
- [2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
- 이를 하나로 합치기 전에 map을 사용해서 문자로 바꾼다.
- join으로 합쳐서 ascii 키를 만든다.
- 키를 asciiDict에 저장한다.
- 있으면 +1
- 없으면 1
- values 중에 가장 큰 값을 max로 찾는다.
- maxCnt를 출력하면 끝!
느낀점
- 문자열을 리스트로 바꾸고 정렬한 다음에 다시 뭉치고 새로 만들어진 문자열을 딕셔너리에 저장하는 방식이 떠오르지 않았다.
- 하지만 아스키 코드를 활용해서 푸는 방법을 고안했고 결국 제일 빠른 방법이 되었다.
- 이유로는 문자열의 길이가 1000이라고 가정할 때 정렬해서 join하는 것 보다 길이가 52인 배열에 저장해서 join하는 것이 더 빠르기 때문이다.
- 이처럼 하나의 방법에 매몰되지 말고 여러 방법을 떠올리는 것이 중요하다.
'알고리즘 > 풀었지만 다시 보기' 카테고리의 다른 글
코드트리 | HashMAP / 원소의 합이 0 {언어 : Python} (0) | 2025.01.16 |
---|---|
코드트리 | HashMap / 세 수의 합 {언어 : Python} (0) | 2025.01.14 |
백준 GOLD 4 [1504번] 특정한 최단 경로 {언어 : Python} (0) | 2024.12.24 |
프로그래머스 [Lv. 4] 단어 퍼즐 {언어 : Python} (0) | 2024.12.10 |
프로그래머스 [Lv. 4] 가사 검색 {언어 : JavaScript} (3) | 2024.12.09 |