답:
나의 길쭉한 답...
result = {'R':0, 'T':0, 'F':0, 'C':0, 'J':0, "M":0, "A":0, "N":0}
def solution(survey, choices):
for i in range(len(survey)):
a = survey[i][0] # A
b = survey[i][1] # N
if choices[i] < 4:
if choices[i] == 3:
result[a] += 1
elif choices[i] == 2:
result[a] += 2
elif choices[i] == 1:
result[a] += 3
elif choices[i] > 4:
if choices[i] == 5:
result[b] += 1
elif choices[i] == 6:
result[b] += 2
elif choices[i] == 7:
result[b] += 3
else:
pass
answer = ''
if result.get('R') >= result.get('T'):
answer += 'R'
else:
answer += 'T'
if result.get('C') >= result.get('F'):
answer += 'C'
else:
answer += 'F'
if result.get('J') >= result.get('M'):
answer += 'J'
else:
answer += 'M'
if result.get('A') >= result.get('N'):
answer += 'A'
else:
answer += 'N'
return answer
print(solution(survey,choices))
+ 팀원들의 답은 노션에 기록되어있다
코드리뷰 하며 알게된 다른 풀이 방법:
문제를 크게 둘로나누었을때
1) result dict에 값 넣기 :
- choice 부분을 dict로 만들어서 풀면 조금 더 짧고 깔끔한 코드가 될 수 있다
choice = {1:3, 2:2, 3:1, 4:0, 5:1, 6:2, 7:3}
- 혹은 선택지에서 4를 빼서 +값 -값으로 계산하는 방법도 있음
ex. "AN", 5 를 입력받았다면,
5-4 = 1 로 값이 점수와 같은 1이 나오므로 N과 묶어서 점수 표기를 할 수 있음
"AN", 1 를 입력받았다면,
1-4 = -3 으로 - 1 이 나온다. -1을 곱해주거나 음수일경우 앞의 문자를 선택하는 if문을 주는 방식으로 풀이.
2) answer 문자열 만들기 :
- for + zip() 사용하여 value값 끼리 비교하여 key값 넣기
- for i in range(0,8,2)
range 세번째 인자로 범위값을 주어 2개씩 묶기
list(type.items())[j][1]
이 부분이 어려워서 출력을 부탁드렸음, type은 내 풀이에서의 result dictionary
print(list(type.items())) # [("R": 1), ("T": 0), ...]
- 비교할 것을 미리 묶어서 제시해주기
mbti_match = [('R','T'),('C','F'),('J','M'),('A','N')]
(1) 이후 for문으로 따로 저장된 dict value값을 가져와 비교 후 answer에 입력
(2) 4에서 빼거나 4를 빼고 value값에 추가한다
+= choice - 4 / += 4 - choice
문제 분석 및 해석
문제가 길어서 링크를 첨부한다.
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 생각한 풀이
받은 지표의 문자열을 dict에 append해주며
=> 풀이하며 비교 시의 값이 없는 오류가 있을 것이라 생각되어 미리 초기화값 result dict를 만들었다.
choice의 값을 integer로 받아서 해당 key 문자의 value값을 더해주기
더해줄 점수
매우동의/매우 비동의 1 or 7 = 3
동의 비동의 2 or 6 = 2
약간동의 약간비동의 3 or 5 = 1
모르겠음 4 = 0
dict의 key로 불러와서 지표끼리의 value값 비교
sorted로 문자오름차순 정렬. => 풀이에 필요 없어서 사용하지 않음
# 질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와
# 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수 / [1,2,3,4,5,6,7]중 선택된 값을 가지고 있음
#배열에서 123 선택지가 비동의
2) 찾아본 것
- dict의 value 값 증가시키기
dict[key값] = value
dict의 key 값을 불러오면 value값이 출력됨을 확인,
+= 으로 바꾸어 값이 더해지는지 확인하였다.
practice = {"A":0}
practice['A'] += 2
print(practice) # {"A":2}
- key 값으로 value값을 가져오는 get() 함수
practice = {"A":0}
print(practice.get('A')) # 출력 0
입력값
- survey
["AN", "CF", "MJ", "RT", "NA"]
["TR", "RT", "TR"]
- choices
[5, 3, 2, 7, 5]
[7, 1, 3]
출력값
"TCMA"
"RCJA"
과정1.
survey 와 choice의 길이가 같으므로 for range 문을 활용했다.
이전 알고리즘에서 문자열도 list처럼 활용할 수 있다고 했던 것을 적용해보았다!
def solution(survey, choices):
for i in range(len(survey)):
a = survey[i][0] # 첫번째 요소의 0번째 값 A
b = survey[i][1] # N
if문으로 각각의 값을 result dict에 추가하도록 함.
def solution(survey, choices):
for i in range(len(survey)):
a = survey[i][0] # A
b = survey[i][1] # N
if choices[i] < 4:
if choices[i] == 3:
result[a] += 1
...
elif choices[i] > 4:
if choices[i] == 5:
result[b] += 1
...
else:
pass
# result = {'R': 0, 'T': 3, 'F': 0, 'C': 1, 'J': 0, 'M': 2, 'A': 1, 'N': 1}
이때 실수를 했는데
1) 4보다 큰 수와 4보다 작은 수에 아래 식을 바꾸어 넣었다.
그래서 각 값이 1만 들어가는 일이 벌어짐,, #팀원분 도움받음ㅠ
2) 그리고 4와 비교한 후 각 선택지를 비교하는 항목에서
if 5: 를 적었는데, 그냥 5면 True가 되어버려서 여전히 3만 들어갔다.
if choices[i] == 5: 와 같이 비교하도록 다시 적어주었다.
과정2.
R T
C F
J M
A N
key 값으로 value값을 가져오는 get() 함수를 사용
result.get('R') = 0
이렇게 value값을 출력한다^.^
출력 조건에 값이 같으면 abc, 사전 순서로 출력하도록 되어있어
같거나 클때 >= 해당 문자를 출력할 수 있도록 했다.
answer = ''
if result.get('R') >= result.get('T'):
answer += 'R'
else:
answer += 'T'
...
return answer
print(solution(survey,choices))
느낀점:
문제가 복잡했지만 재밌었다
코드 풀이를 나누는 시간을 가졌는데 설명을 잘 못해서 횡설수설 하는 자신이 느껴졌다.
이런 것도 많이 풀면서 연습하면 설명도 잘하게 되겠지.
다른분들 풀이가 어메이징해서 설명듣는것도 분석하는 것도 신기했다
나도 멋있는 코드 짜고싶다ㅋㅋ
'알고리즘 풀이' 카테고리의 다른 글
[alghorithm] 페어 - 프로그래머스: 과일 장수 (0) | 2023.05.31 |
---|---|
[algorithm] 페어 - 프로그래머스: 체육복 (0) | 2023.05.19 |
[algorithm] 페어 - 백준:2108 통계학 (1) | 2023.05.04 |
[algorithm] 페어 - 백준:25314 코딩은 체육과목 | 프로그래머스: 문자열 내 마음대로 정렬하기 (0) | 2023.05.03 |
[algorithm] 페어 - 백준:2563 색종이 (0) | 2023.05.02 |