728x90
반응형
https://www.acmicpc.net/problem/16499
문제의 접근 방법
단어를 알파벳 단위로 분리해서 정렬한 후 비교하기
-> 먼저 입력받은 문자를 알파벳 단위로 분리해서 정렬하여 저장한 후, 그 분리된 알파벳들을 합쳐서(join) 미리 선언해 둔 빈 리스트 arr에 없다면 추가해주기
( 이미 입력받은 문자열을 정렬했기 때문에 만약 값이 같다면 arr에 추가하지 않고 넘어가게 되므로, 각기 다른 문자열들만 저장되게 된다 = 단어가 arr의 개수만큼의 그룹으로 나뉜다. )
내가 막혔던 부분
결과값은 같게 나왔지만 오답이었다.
나의 문제 풀이 방법 (오답)
N = int(input())
arr = []
for _ in range(N):
word = list(input()) # 단어를 알파벳 단위로 쪼개서 저장
arr.append(word) # 그 결과를 arr에 2차원 배열로 저장
count = 0
for i in range(len(arr)):
for j in range(i+1,len(arr)):
# 두 리스트가 다른 알파벳이면서 정렬했을 때 같은 알파벳이라면 count += 1
if arr[i] != arr[j] and sorted(arr[i]) == sorted(arr[j]):
count += 1
elif len(arr[i]) == 1 and arr[i] == arr[j]:
# 두 리스트의 길이가 1이면서 같다면 count += 1
count += 1
print(count)
정답 소스코드
n = int(input())
arr = []
for _ in range(n):
word = sorted(list(input())) # 입력받은 문자열들을 알파벳 단위로 잘라서 리스트에 저장 후 정렬
word = ''.join(word) # 정렬한 문자열을 다시 합치기
if word not in arr:
arr.append(word) # arr에 해당 단어가 없다면 추가하기
print(len(arr)) # 앞의 과정을 통해 추출된 단어들이 담긴 리스트의 개수 = 나눌 수 있는 그룹의 수
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 행복 유치원 : 13164번 - Python (0) | 2022.06.10 |
---|---|
[백준] 생일 : 5635번 - Python (0) | 2022.06.09 |
[백준] 비트 우정지수 : 12782번 - Python (0) | 2022.06.06 |
[백준] 이장님 초대 : 9237번 - Python (0) | 2022.06.04 |
[백준] 사과나무 : 19539번 - Python (0) | 2022.06.03 |