| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 알고리즘
- poetry
- github
- js
- 개발일지
- 채팅
- Class
- vscode
- 가상환경
- 프로그래머스
- 마스킹
- 1주차
- 장고
- 프로젝트
- 정보처리기사실기
- 파이썬
- channels
- Git
- WebSocket
- resnet50
- re-id
- sql
- WHERE절
- 2주차
- REDIS
- WIL
- 백준
- 정보처리기사
- Commpot
- 미니프로젝트
Archives
- Today
- Total
개발일기
#16 프로그래머스 문자열내마음대로정렬하기 & 문자열정렬2 & 중복된문자제거(dict.fromkeys) 본문
1. 문자열 내 마음대로 정렬하기

sort() 함수에 key를 사용하여 조건에 맞게 정렬할 수 있다. 설명은 다음과 같다.
If a key function is given,
apply it once to each list item and sort them, ascending or descending, according to their function values.
문제에서 각 문자열의 인덱스 n번째 글자를 기준으로, 그리고 인덱스 n번째 글자가 같은 문자열이 여럿일 경우에는 사전순으로 정렬하라는 조건이 있기 때문에, 키를 통해 조건을 지정해주었다.
strings.sort(key=lambda x:(x[n],x))
전체 풀이)
# 내 풀이
def solution(strings, n):
strings.sort(key=lambda x:(x[n],x))
# 인덱스 n번째 문자가 같은 문자열이 여럿일 경우, 사전순으로 정렬하라고 했으므로
# 이 경우 때문에 lambda에 x[n] 뿐 아니라 x도 넣음!
# 예시로는, ["abce", "abcd", "cdx"] 을 입력했을 때 ["abcd", "abce", "cdx"] 출력되는 것
return strings
sort() 함수에서 key로 정렬하는 조건을 정해줄 수 있음을 몰랐다고 하더라도 다음과 같은 풀이로 풀 수 있다.
def solution(strings, n):
new =[]
answer =[]
for i in range(len(strings)):
a = strings[i][n]
b = a+strings[i]
new.append(b)
new.sort()
for i in range(len(new)):
c = new[i][1:]
answer.append(c)
return answer
이는 n번째 인덱스에 해당하는 문자를 문자열 제일 앞에 붙이고, sort()를 한다.
그럼 n번째 인덱스 문자를 기준으로 리스트 속 문자열들이 정렬될 것이다.
그런 후에 문자열의 첫번째 문자 즉, n번째 인덱스 문자를 붙인 것을 제거하고 return하면 된다.
2. 문자열 정렬하기 2

def solution(my_string):
return ''.join(sorted(my_string.lower()))
# sorted를 하면 리스트로 반환되므로 join을 통해 문자열로 바꿔주기
3. 중복된 문자 제거하기

# 중복된 문자 제거
# 내풀이
def solution(my_string):
answer = ''
for i in range(len(my_string)):
if my_string[i] not in answer:
answer += my_string[i]
return answer
def solution(my_string):
answer = ''
for i in my_string:
if i not in answer:
answer += i
return answer
# 다른 풀이
def solution(my_string):
# print(dict.fromkeys(my_string))
return ''.join(dict.fromkeys(my_string))
# fromkeys : Create a new dictionary with keys from iterable and values set to value.
두 가지 버전으로 풀어보았다. 사실 원리는 완전 똑같고..ㅎㅎ
하나는 my_string 문자열 길이만큼 for문을 돌려서 확인하고,
나머지 하나는 바로 my_string에서 하나씩 문자를 꺼내서 확인하는 방법의 차이일 뿐이다.
다른 풀이로, fromkeys를 활용한 풀이가 있어 인상깊어서 가지고 왔다.
print(solution("We are the world")) 이렇게 했을 때,
print(dict.fromkeys(my_string))의 출력값은?
{'W': None, 'e': None, ' ': None, 'a': None, 'r': None, 't': None, 'h': None, 'w': None, 'o': None, 'l': None, 'd': None}
dict.fromkeys(my_string}을 하면 위와 같은 딕셔너리가 만들어지고, 이를 join을 통해 문자열로 반환해주는 것이다.
dict.fromkeys(keys, value)
- 딕셔너리를 생성할 때 편리하게 사용할 수 있는 메소드. keys 옵션 값에 문자열을 입력할 수도 있다.
- keys: 생성하려는 dictionary의 키(key)의 목록
- value: 생성하려는 dictionary의 값(value)
- 메서드 명 앞에 반드시 dict 키워드 붙여야 함.
- List 중복 요소 제거에 사용 가능.
사용 예시)
1. 문자열
print(dict.fromkeys("Hello"))
# 출력값 {'H': None, 'e': None, 'l': None, 'o': None}
print(dict.fromkeys("Hello",10))
# 출력값 {'H': 10, 'e': 10, 'l': 10, 'o': 10}
2. 리스트
print(dict.fromkeys([1,2,3,4],10))
# 출력값 {1: 10, 2: 10, 3: 10, 4: 10}
3. 튜플과 집합
print(dict.fromkeys((1,2,3)))
# 출력값 {1: None, 2: None, 3: None}
print(dict.fromkeys({"a","b","c"},0))
# 출력값 {'a': 0, 'b': 0, 'c': 0}
'오류 및 알고리즘정리본' 카테고리의 다른 글
| 18. 백준 알고리즘 개, 별찍기 2 (0) | 2023.05.19 |
|---|---|
| 17. 백준 알고리즘 고양이, 백발백중, 별찍기1 (0) | 2023.05.18 |
| 백준 알고리즘 시간초과 방지하는 법 (0) | 2023.05.04 |
| #15 백준 통계학 & 영단어 암기는 괴로워 (0) | 2023.05.04 |
| #14 백준 코딩은 체육과목이다 & 블랙잭 (0) | 2023.05.02 |