사용 언어 - Python3
문제 - 외톨이 알파벳
https://school.programmers.co.kr/learn/courses/15008/lessons/121683
정답
구현
외톨이 알파벳이 아닌 경우 제거하기
(내 풀이)
answer 에 중복을 제거한 외톨이 알파벳 후보를 저장해주고, 외톨이 알파벳이 아닌 경우를 제거해줬다.
1. 개수가 한개인 알파벳은 외톨이 알파벳이 아니다.
string.count(string[i]) == 1
2. 여러 개여도 나뉘어 있지않고, 한 부분으로 뭉쳐있으면 외톨이 알파벳이 아니다.
str(string[i])*string.count(string[i])
e가 4개인데 'eeee'가 string안에 있다면, 뭉쳐있는 경우이다.
출력 : 알파벳 순으로 정렬해서 이어붙이기
answer = ''.join(sorted(answer))
def solution(input_string):
answer = ''.join(set(input_string)) # 중복 제거
string = list(input_string)
for i in range(len(string)):
# 애초에 한개밖에 없는 알파벳은 외톨이 알파벳이 아니다.
if string.count(string[i]) == 1:
answer = answer.replace(string[i],"")
else:
# 한부분으로 뭉쳐있으면 외톨이 알파벳이 아니다.
list_a = str(string[i])*string.count(string[i])
if list_a in ''.join(string):
answer = answer.replace(string[i],"")
# 외톨이 알파벳을 알파벳순으로 이어 붙인 문자열
if answer == '':
return "N"
else:
answer = ''.join(sorted(answer))
return answer
(좋은 풀이)
from collections import Counter 를 사용하는 방법
1. 외톨이 알파벳 후보 list를 만들어준다.
sorted(list(Counter(input_string).key()))
2. 해당 알파벳의 인덱스 위치를 리스트에 저장한다.
3. 알파벳(인덱스) 개수가 1개이면 외톨이 알파벳이 아니다.
4. 인덱스가 연속으로 있지 않은 경우 외톨이 알파벳에 해당한다.
from collections import Counter
def solution(input_string):
answer = ''
# 외톨이 알파벳 후보 list
input_alpha = sorted(list(Counter(input_string).keys()))
for i in range(len(input_alpha)):
index_check = [] # 해당 알파벳의 인덱스 위치
for j in range(len(input_string)):
if (input_string[j] == input_alpha[i]):
index_check.append(j)
for c in range(len(index_check)):
# 해당 알파벳의 개수가 1개인 경우 무시
if (c+1 == len(index_check)):
break
# 해당 알파벳 인덱스가 연속으로 있지 않은 경우 (연속위치 X)
if (index_check[c] + 1 != index_check[c+1]):
answer += input_alpha[i]
break
# 외톨이 알파벳이 한개도 없는 경우
if len(answer) == 0:
answer = "N"
return answer
레퍼런스
Counter 사용법
Counter = 각 원소가 몇번 나오는지 개수를 세준다.
from collections import Counter
# 저장형식
# 출력: Counter({'h': 0, 'e': 1, 'l': 4, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
# 가장 많은 원소 출력
Counter('hello world').most_common()
# 딕셔너리로 사용됨
ex_counter['kim'] # 출력: 5
ex_counter.keys() # 출력: dict_keys(['kim', 'park', 'choi'])
ex_counter.values() # 출력: dict_values([5, 2, 3])
ex_counter.items() # 출력: dict_items([('kim', 5), ('park', 2), ('choi', 3)])
'Algorithm > 구현' 카테고리의 다른 글
[프로그래머스] PCCP 모의고사 2회 1번 실습용 로봇 (0) | 2023.12.15 |
---|---|
[프로그래머스] PCCP 모의고사 1회 2번 체육대회 (0) | 2023.12.13 |
[프로그래머스 lv 3] PCCP 기출 3번 아날로그 시계 (1) | 2023.12.08 |
[프로그래머스 lv 1] PCCP 기출 1번 붕대감기 (0) | 2023.12.04 |
[백준] 16472번 고냥이 (투포인터 문제) (0) | 2023.11.03 |
댓글