일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sql
- jquery
- 무료강의
- 파이썬
- 반응형
- React
- python
- MongoDB
- html
- useState
- error
- 개인정보수집유효기간
- ㅐㄱ이
- 코딩기초트레이닝
- 프로그래머스입문
- 네이버커넥트재단
- css
- 장고이미지처리
- 스파르타코딩클럽
- 장고 다중이미지
- 파이썬무료강의
- 프론트엔드
- django multi image
- GIT
- 참가후기
- 스파르타
- 22938번
- 프로그래머스
- SEF2022
- 20492번
- Today
- Total
코딩,해볼까
05.01. 과제해설 / 문자열과 리스트 딕셔너리 뽀개기 [::] / 다양한 함수들 총집합! 본문
0. 오늘의 공부
1) 과제 해설 강의
2) 알고리즘 풀이
📍 프로그래머스 - 코딩테스트 입문 문자열 정렬하기 (2)
def solution(my_string):
# answer = ''
lower_string = list(my_string.lower())
sort_string = sorted(lower_string)
return ''.join(sort_string)
# 축약
def solution(my_string):
return ''.join(sorted(my_string.lower()))
📍 프로그래머스 - 코딩테스트 입문 한 번만 등장한 문자
나는 풀지 못했지만 팀원들이 나의 생각을 발전시켜 주셨다.
s 문자열을 list화 한다.
set 함수를 통해 중복을 제거한 dict 형태를 list화 한다.
fot문에서는 중복을 제거한 set함수를 넣어준다.
i를 리스트에서 지운 후 i가 리스트에 없다면, 그 리스트에서는 1개만 존재했다는 뜻이므로 이 i를 answer에 추가해준다.
문제를 풀기 전에 구상해나가는 과정이 중요하다.
def solution(s):
answer = ''
s_list = list(s) # list['a', 'b', 'c', 'a', 'b', 'c', 'a', 'd', 'c']
# s_set_list = set(list(s)) # dict{'a', 'c', 'd', 'b'}
s_set_list = list(set(list(s))) # list['a', 'c', 'd', 'b']
for i in sorted(s_set_list):
s_list.remove(i)
if i not in s_list:
answer += i
# 지우고 나서 리스트에 없다면 1개만 있었다는 것이므로 그 i를 answer에 추가해준다.
return answer
인상깊었던 코드 정리
#1. [::]의 의미
# 팀원분의 코드. words[::] 깊은 복사..
answer = ''
words = sorted(s)
for i in range(len(words)):
alpha = words[::] # words.copy()
#2. 너무나도 간단한 count 활용 함수
def solution(s):
answer = ''
for i in s:
if s.count(i)==1:
answer+=i
answer=''.join(sorted(answer))
return answer
#3. dict 활용 / for key, value in .items() 활용 / 코드가 예쁘다
def solution(s):
s = sorted(s)
answer = {}
list = ''
for i in s:
try:
answer[i] += 1
except:
answer[i] = 1
for key, value in answer.items():
if value == 1:
list += key
return list
#4. 우리조의 알고리즘 멋쨍이 팀원분의 다른 팀원분들의 생각과 코드 리펙토링 과정. 두고두고 찾아보고 싶다.
def solution(s):
# 문자열 s
# in으로 확인하기
answer = ''
s_list = {}
for i in s:
if i not in s_list:
s_list[i] = 1
elif i in s_list:
s_list[i] += 1
# for문의 순서 = key를 기준으로 sort된 s_list로 사용
for i in sorted(s_list.keys()):
# value 값이 1이면
if s_list[i] == 1:
answer += i
return answer
# dict활용 풀이 리팩토링
def solution(s):
s_dict = {}
for i in s:
# s_dict에 없다면
if i not in s_dict:
s_dict[i] = 1
# s_dict에 있다면
elif i in s_dict:
s_dict[i] += 1
# if 값이 1인 key를 정렬해서 리스트화
# ''.join()으로 리스트 언패킹
return ''.join([i for i in sorted(s_dict.keys()) if s_dict[i] == 1])
# list pop활용 풀이
def solution(s):
answer = []
pop_list = []
for i in s:
# answer에 i가 없다면
if i not in answer:
answer.append(i)
# answer에 i가 있다면
else:
pop_list.append(i)
for p in set(pop_list):
# 전체 리스트에서 index찾기
pop_index = answer.index(p)
# 전체 리스트에서 빼기
answer.pop(pop_index)
# del로 같은 결과 가능
# del answer[pop_index]
return ''.join(sorted(answer))
# count 활용 풀이
def solution(s):
# for문 = set()으로 중복을 제거하고 sorted()로 정렬된 s
# i = count로 확인된 숫자가 1개인 변수
return ''.join([i for i in sorted(set(s)) if s.count(i) == 1])
# index 활용 풀이 추가
def solution(s):
answer = ''
for n in set(s):
# 첫번째 index 찾기
first_index = s.index(n)
# 두번째 index 찾기 시도
try:
# index(n, s의 시작점)
_ = s.index(n, first_index+1)
# 두번째 index가 없을 경우 except ValueError:
except ValueError:
answer += n
return ''.join(sorted(answer))
# 지현님 코드 리팩토링
# remove는 str로 가능하다는 이야기에 힌트 얻음
def solution(s):
answer = ''
words = sorted(s)
for i in words:
alpha = words[::] # words.copy()
alpha.remove(i)
if i not in alpha:
answer += i
return answer
# 혁준님 코드, 서경님 생각 리팩토링
# set()의 활용이 for문 하나로 그쳐서 변수 선언대신 직접 사용
def solution(s):
answer = ''
s_list = list(s)
for i in sorted(set(s)):
s_list.remove(i)
if i not in s_list:
answer+=i
return answer
1. 문제점
모르는 함수가 많다. (정확한 사용법을 잘 모른다.)
pop, sort, for문 등등 여러가지 방법들을 구체적으로 만들어나가지 못했다.
컨디션 난조로 두 번째 문제를 풀 때 집중하지 못했다.
2. 시행착오
각 타입에 맞는 함수들이 정해져 있는데, 아직 익숙하지 않아서
생각나는대로 이렇게저렇게 적어봤다.
1) sorted() : 이 내장 함수는 파이썬에서 순회가 가능한(iterable) 객체를 인자로 받는다.
ex) list, dict, set, str, bytes, tuple, range...
iterator 객체 는 값을 차례대로 꺼낼 수 있는 객체 = 개념이 조금 어려워서 필요할 때 꺼내보자.
3. 해결방법
type과 print를 활용하여 형태가 헷갈리지 않게 했다.
type() : 객체를 인자로 받아 해당 객체의 데이터 타입을 반환해주는 함수입니다.
print() : 출력 함수.
4. 알게된 점
1) 문자열, 리스트, 딕셔너리는 익숙해질때까지 많이 푸는 수 밖에 없다.
2) set, sort, sorted, for문의 .items 등 많이 쓰지 않는 함수들을 알게되었다.
3) str, int, dict, list 등 형태에 따른 코드를 잘 생각하자.
4) 잊어버리지 않게 매일매일 꼭 알고리즘을 풀자.
5) 짧은 코드들은 시간을 조금 들이더라도 코드를 줄일 수 있는 방법을 한번씩은 고민해보자.
'Back > TIL' 카테고리의 다른 글
05.03. 문자열과 리스트 자료형 / 프로그래머스 전국 대회 선발 고사 (7) | 2023.05.03 |
---|---|
05.02. Object Oriented Programming / 객체 지향 특강 정리 (0) | 2023.05.02 |
04.28. 2차원배열 / 강의시청 / 과제 (0) | 2023.04.28 |
04.27. 다양한 출력 방법 / 2차원 배열 / 리스트 컴프리헨션 / 시간복잡도 테스트 코드 (0) | 2023.04.28 |
04.26. 강의 / 알고리즘 풀이 (0) | 2023.04.26 |