본문 바로가기
Algorithm/구현

[프로그래머스] PCCP 모의고사 1회 1번 외톨이 알파벳

by HANNI하니 2023. 12. 13.

사용 언어 - Python3

문제 - 외톨이 알파벳

https://school.programmers.co.kr/learn/courses/15008/lessons/121683

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

정답

구현

외톨이 알파벳이 아닌 경우 제거하기

 

(내 풀이)

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)])

 

https://www.daleseo.com/python-collections-counter/ 

 

파이썬 collections 모듈의 Counter 사용법

Engineering Blog by Dale Seo

www.daleseo.com

 

댓글