Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- jquery
- 프로그래머스
- 프로그래머스입문
- 반응형
- 장고 다중이미지
- SEF2022
- 무료강의
- 참가후기
- 장고이미지처리
- css
- 프론트엔드
- 22938번
- 스파르타코딩클럽
- html
- 스파르타
- 개인정보수집유효기간
- sql
- 20492번
- 파이썬
- MongoDB
- 파이썬무료강의
- django multi image
- 코딩기초트레이닝
- ㅐㄱ이
- useState
- python
- React
- 네이버커넥트재단
- GIT
- error
Archives
- Today
- Total
코딩,해볼까
08.15. 프로그래머스 : 성격 유형 검사하기 (실패) 본문
🔎 성격 유형 검사하기
4개의 지표, 7개의 선택지로 성격 유형 검사의 결과를 구하라.
"""
survay = 유형, 순서 ["AN", "CF", "MJ", "RT", "NA"]
choices = 검사자가 선택한 번호 [5, 3, 2, 7, 5]
1. 매번 바뀌는 survay에 따라 성격유형 점수를 구할 수 있는 함수를 만들어야 한다.
2. 만든 검사지와 성격유형 점수를 매치하여 유형과 점수를 딕셔너리에 넣으면 좋겠다. {유형 : 점수}
3. 큰 점수의 유형을 맨 앞으로 배치한다.(만약 같다면 사전순으로 배치한다.)
"""
💡 문제풀이#n... 실패
딕셔너리를 활용하여 문제를 풀 계획을 세웠다.
"""
type_score의 key = survay[i]
key로 value 찾기 (choices[i]의 숫자가 key)
type_score의 value = choices[i]
"""
처음에는 이렇게 풀었다가,
for i in range(len(choices)):
v = score.get(choices[i])
if choices[i] < 4:
k = survey[i][0]
else:
k = survey[i][1]
# type_score.setdefault(k,v) 기본값 (key value가 없지만 넣어놓고 싶을 때, 이친구는 type_score를 선언하지 않아도 된다.) type_score를 만들어줘 라는 의미가 있다.
if k not in type_score:
type_score[k] = v
# print('if', k, v)
else:
type_score[k] += v
# print('else', k, v)
# 존재한다면 없다면
# SyntaxError: cannot assign to function call 함수 호출에 할당할 수 없음
return answer
가독성이 조금 더 좋아질 수 있도록 수정하였다.
def solution(survey, choices):
answer = ''
score = {1:3, 2:2, 3:1, 4:0, 5:1, 6:2, 7:3}
type_score = {}
for i in range(len(choices)):
v = score.get(choices[i])
k = survey[i][0] if choices[i] < 4 else survey[i][1]
if k not in type_score:
type_score[k] = v
else:
type_score[k] += v
여기까지 결과는?
print(type_score)
# 테스트 1 출력 : {'N': 1, 'C': 1, 'M': 2, 'T': 3, 'A': 1}
# 테스트 2 출력 : {'R': 6, 'T': 1}
계획 2번 주어진 survey와 choices 유형과 점수를 딕셔너리에 잘 넣었다. {유형 : 점수}
이제 유형과 점수, 그리고 유무에 따라서 if else 문을 적절히 사용해주면 문제를 풀 수 있겠다!! (고 굉장히 가볍게 생각했는데.. 여기서부터 막히기 시작했다.😭)
# 둘 다 있으면, 둘 다 없으면, r만 있으면, t만 있으면
for key, value in type_score.items():
if 'R' and 'T' in key:
r_score = type_score.get('R') or 0
t_score = type_score.get('T') or 0
if r_score >= t_score:
# answer += 'R'
print(answer) # R을 += 해준 적이 없는데 왜 벌써 들어가있지?
else:
answer += 'T'
elif 'R' not in key:
if 'T' in key: answer += 'T'
# elif 'T' not in key:
# if 'R' in key: answer += 'R'
else:
answer += 'R'
여기서의 문제점, 나는 분명 answer에 +를 한 글자씩 하고 있는데, 테스트 2번에 자꾸 'RR' R이 2번 들어가는 이상한 오류가 났다. 그래서 R이 중복되는 위치를 찾고자 print로 테스트를 해본 결과, answer += 'R' 이 들어가는 자리에 아무것도 넣지 않았는데, R이 그냥 들어가고 있었다. 앞에서 R을 넣어준 적이 없는데 왜 이렇게 되는 것인지를 아직 찾지 못했다...
💡 배운 점
1. 딕셔너리 활용 방법
2. if 작은 단위 in 큰 단위
오늘 배운 점들은 한번 포스팅하면서 정리해야겠다.
'Back > TIL' 카테고리의 다른 글
08.17. 프로그래머스 : 신규 아이디 추천 (0) | 2023.08.17 |
---|---|
08.16. 프로그래머스 : 행렬의 곱셈 (0) | 2023.08.16 |
08.14. 프로그래머스 : 소수 찾기 (LV.2) 완전탐색 (0) | 2023.08.14 |
08.13. 프로그래머스 : 소수 만들기 (0) | 2023.08.14 |
08.11 프로그래머스 : 삼총사, 키패드 누르기 (0) | 2023.08.11 |
Comments