<로직 고민>
# 일단 for문으로 문자열의 인덱스별로 돌려야 함
# 돌리면서 새로운 변수에 하나씩 저장하는데
# 이미 새로운 변수에 해당 문자가 있으면 저장 안 하고 넘어감
# 완성된 새로운 변수 반환
def solution(my_string):
answer = ''
for abc in my_string:
for i in answer:
if abc != i:
answer += abc
return answer
my_string1 = 'people'
my_string2 = 'We are the world'
print(solution(my_string1))
print(solution(my_string2))
# 출력화면
# (없음)
- 오랜만에 알고리즘 문제 풀어서 그런가 내가 봐도 말도 안 되는 코드를 짠 것 같다
- 말은 쉬운데 구현하려니 모르겠네...
- 혼자 풀다가 제껴뒀는데 페어프로그래밍 하면서 풀었다 ㅎㅎ...그래서 내 풀이는 아니지만 그래도 팀원이랑 같이 푼 거니까 남겨야겠다
- 팀원분이 제안하신 건데 입력값 문자열을 리스트로 변환해서 set함수를 쓰는 것이었다
- set함수 공부한 적 있었던 것 같은데....완전히 잊고 있었다
my_string = "people"
print(set(list(my_string)))
# 출력화면
# {'e', 'o', 'l', 'p'}
- 이런 식으로 중복값을 제거하는 데는 성공했다
- 그런데 문제는 원래 문자열 자리에 있지 않고 abc순으로 정렬되어 나온다는 것이었다
- 어제 들은 알고리즘 강의가 생각났다
- 원래 문자열을 하나씩 돌리면서 중복값을 제거한 문자열에 해당 문자가 있으면 바로 값을 리턴하는 것이다
- 그걸 이 문제에 맞춰서 일단 answer라는 빈 리스트에 해당 문자를 append 하기로 했다
def solution(my_string):
answer = []
set_string = set(list(my_string))
for i in list(my_string):
if i in set_string:
answer.append(i)
return answer
print(solution("people"))
# 출력화면
# ['p', 'e', 'o', 'p', 'l', 'e']
- 그랬더니 문자열이 계속 돌아서 그런지 걍 모든 문자가 다 나와버렸다 중복값은 나오면 안 되는데..
- 고민하다가 팀원분이 의견을 내셨다
def solution(my_string):
answer = []
set_string = set(list(my_string))
for i in list(my_string):
if i in set_string:
if not i in answer: #answer에 해당 문자열이 없는 경우에만 append!!
answer.append(i)
return answer
print(solution("people"))
print(solution("We are the world"))
# 출력화면
# ['p', 'e', 'o', 'l']
# ['W', 'e', ' ', 'a', 'r', 't', 'h', 'w', 'o', 'l', 'd']
- 중복값이 나오는 문제는 해결이 됐는데 여전히 원하는 출력화면이 아니다
- 하마터면 팀원분한테 묻어갈 뻔 했는데 다행히 내게 좋은 의견이 있었다!
- 리스트를 문자열로 변환하는 방법 join !!
def solution(my_string):
answer = []
set_string = set(list(my_string))
for i in list(my_string):
if i in set_string:
if not i in answer:
answer.append(i)
return ''.join(answer) # 리스트를 문자열로 반환함
print(solution("people"))
print(solution("We are the world"))
# 출력화면
# peol
# We arthwold
- 근데.....페어프로그래밍 끝나고 이렇게 글쓰면서 혼자서 생각을 해보니까....굳이 answer을 빈 리스트로 선언할 필요가 없었던 것 같다는 생각이.....
- 그래서 answer를 문자열로 선언하고 i를 answer에 더해주는 걸로 바꾸고 answer 자체를 리턴하는 걸로 바꾸니까 이것도 답이 된다!
- 나의 join은 사실 필요가 없었던 것이었다...!!!
- 뭔가 입력값 my_string을 리스트로 변환시켜줬으니까 answer도 똑같이 리스트 형태여야 한다고 생각했었다 허허
<완성한 코드>
def solution(my_string):
answer = ''
set_string = set(list(my_string))
for i in list(my_string):
if i in set_string:
if not i in answer:
answer += i
return answer
print(solution("people"))
print(solution("We are the world"))
# 출력화면
# peol
# We arthwold
<다른 사람 풀이>
- 천재풀이1
def solution(my_string):
return ''.join(dict.fromkeys(my_string))
- 아니 이렇게 간단하게 풀 수 있다고.....?
- 천재풀이2
def solution(my_string):
answer = ''
for i in my_string:
if i not in answer:
answer+=i
return answer
- 아니 이렇게 단순하게 풀리는 문제였다고....?
- 우린 리스트로 왜 변환한겨....if문은 왜 2개나 쓴겨.......for문 2번 안 돌려서 그나마 다행....
- 천재풀이3
def solution(my_string):
answer = ''
set_letter = set(my_string)
for string in my_string:
if string in set_letter:
answer += string
set_letter.remove(string)
return answer
- 읭....리스트 아니어도 set함수 쓸 수 있나봐...
- 천재풀이4
mystr = "people"
print(set(mystr))
# 출력화면
# {'e', 'l', 'o', 'p'}
- 진짜 그러네.....오키 하나 더 알아간다....