https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
3~4시간 걸림
이유: 파이썬 사용 미숙 + 첫번째 아이디어가 잘못됬음 + 디버깅 테스트
'''
one =dict R , T
two =dict C , F
three = dict J, M
four =dict A , N
val값 0으로 초기화
만약 choices가 1~3 이면 왼쪽에, 5~7이면 오른쪽에 choices 점수 할당.
물론 val할당은 survey에 따라 다름.
사전 dict 4개 탐색 , 두 원소들 중 값이 높은것들 출력. 값이 동일하다면 사전순으로 낮은 문자 출력
'''
points=[3,2,1,0,1,2,3]
one={"R":0, "T": 0}
two={"C":0, "F": 0}
three={"J": 0, "M": 0}
four={"A": 0, "N": 0}
named=["TR","RT","CF","FC","JM","MJ","AN","NA"]
def assign_dict(tar, point, dir):
answer=""
global one, two, three, four, named
if dir==-1: #좌측 dict에 할당
for x in range(len(named)):
if named[x] == tar:
if x == 0 or x== 1:
one[named[x][0]] += point
elif x==2 or x==3: #CF or FC
two[named[x][0]] += point
elif x==4 or x==5: #JM or MJ
three[named[x][0]] += point
elif x==6 or x==7: #AN or NA
four[named[x][0]] += point
elif dir== 1: #오른쪽 dict에 누적 합
for x in range(len(named)):
if named[x] == tar:
if x == 0 or x== 1:
one[named[x][1]] += point
elif x==2 or x==3: #CF or FC
two[named[x][1]] += point
elif x==4 or x==5: #JM or MJ
three[named[x][1]] += point
elif x==6 or x==7: #AN or NA
four[named[x][1]] += point
def solution(survey, choices):
answer = ''
global one, two, three, four, named
#choice 에 해당하는 점수 range 나눠서 0번째 인덱스에 놓을지, 1번째 인덱스에 놓을지 선택.
# 만약 기존에 할당된 value값보다 작으면 할당 x
#0번째 인덱스와 첫번째 인덱스의 값 존재 시 큰값으로 answer 에 key 값할당 값이 동일하다면 사전순으로 낮은 문자를 할당.
for x in range(len(choices)):
point_idx = choices[x]-1 # point 인덱스
if point_idx<=2: #좌측에 할당.
assign_dict(survey[x], points[point_idx], -1)
elif point_idx>=4:
assign_dict(survey[x], points[point_idx], 1)
nums=[one,two,three,four]
for y, x in enumerate(nums): # 여러개. 그냥 해봄, enumerate 문법있다는걸 알고 싶었음
tmp_val=list(x.values()) # key와 value들 리스트 형태로 만들어서 0,1번째 인덱스 비교하기. 값이 큰 경우 할당, 동일값이면 사전적으로 낮은 문자 할당.
tmp_key=list(x.keys())
if tmp_val[0]>tmp_val[1]:
answer+=tmp_key[0]
elif tmp_val[0]<tmp_val[1]:
answer+=tmp_key[1]
else:
if tmp_key[0]<tmp_key[1]:
answer+=tmp_key[0]
else:
answer+=tmp_key[1]
return answer
제출코드
points=[3,2,1,0,1,2,3]
one={"R":0, "T": 0}
two={"C":0, "F": 0}
three={"J": 0, "M": 0}
four={"A": 0, "N": 0}
named=["TR","RT","CF","FC","JM","MJ","AN","NA"]
def assign_dict(tar, point, dir):
answer=""
global one, two, three, four, named
if dir==-1: #좌측 dict에 할당
for x in range(len(named)):
if named[x] == tar:
if x == 0 or x== 1:
one[named[x][0]] += point
elif x==2 or x==3: #CF or FC
two[named[x][0]] += point
elif x==4 or x==5: #JM or MJ
three[named[x][0]] += point
elif x==6 or x==7: #AN or NA
four[named[x][0]] += point
elif dir== 1: #오른쪽 dict에 누적 합
for x in range(len(named)):
if named[x] == tar:
if x == 0 or x== 1:
one[named[x][1]] += point
elif x==2 or x==3: #CF or FC
two[named[x][1]] += point
elif x==4 or x==5: #JM or MJ
three[named[x][1]] += point
elif x==6 or x==7: #AN or NA
four[named[x][1]] += point
def solution(survey, choices):
answer = ''
global one, two, three, four, named
for x in range(len(choices)):
point_idx = choices[x]-1 # point 인덱스
if point_idx<=2: #좌측에 할당.
assign_dict(survey[x], points[point_idx], -1)
elif point_idx>=4:
assign_dict(survey[x], points[point_idx], 1)
nums=[one,two,three,four]
for y, x in enumerate(nums): # 여러개. 그냥 해봄, enumerate 문법있다는걸 알고 싶었음
tmp_val=list(x.values()) # key와 value들 리스트 형태로 만들어서 0,1번째 인덱스 비교하기. 값이 큰 경우 할당, 동일값이면 사전적으로 낮은 문자 할당.
tmp_key=list(x.keys())
if tmp_val[0]>tmp_val[1]:
answer+=tmp_key[0]
elif tmp_val[0]<tmp_val[1]:
answer+=tmp_key[1]
else:
if tmp_key[0]<tmp_key[1]:
answer+=tmp_key[0]
else:
answer+=tmp_key[1]
return answer
타인코드 [ 단순하고 가독성 좋음]
def solution(survey, choices):
scores = {'R':0, 'T':0, 'C':0, 'F':0, 'J':0, 'M':0, 'A':0, 'N':0}
for i in range(len(survey)):
choice = choices[i]
element = survey[i]
if choice == 1:
scores[element[0]] += 3
elif choice == 2:
scores[element[0]] += 2
elif choice == 3:
scores[element[0]] += 1
elif choice == 4:
scores[element[0]] += 0
elif choice == 5:
scores[element[1]] += 1
elif choice == 6:
scores[element[1]] += 2
else:
scores[element[1]] += 3
print(scores)
answer = ""
if scores['R'] < scores['T']:
answer += 'T'
else:
answer += 'R'
if scores['C'] < scores['F']:
answer += 'F'
else:
answer += 'C'
if scores['J'] < scores['M']:
answer += 'M'
else:
answer += 'J'
if scores['A'] < scores['N']:
answer += 'N'
else:
answer += 'A'
return answer
타인 코드 참조후 내코드
#dict 에 1~4번 key 성격유형, valuee point 점수
#choice가 1~3 이면 survey[0] 에 포인트 할당 point[choices[x-1]]
#dict에서 일일이 비교하기. 포인트. 사전정렬.
dict_list={"R":0,"T":0,"C":0,"F":0,"J":0,"M":0,"A":0,"N":0}
point=[3,2,1,0,1,2,3]
def solution(survey, choices):
answer = ""
for y,x in enumerate(survey):
if choices[y]<=3:
dict_list[x[0]]+=point[choices[y]-1]
elif choices[y]>=5:
dict_list[x[1]]+=point[choices[y]-1]
if dict_list["R"]<dict_list["T"]:
answer+="T"
else: answer+="R" #이미 0번째가 사전적으로 낮은 문자이기에, 굳이 같다라는 조건 안에 사전식비교 할 필요없음
if dict_list["C"]<dict_list["F"]:
answer+="F"
else: answer+="C"
if dict_list["J"]<dict_list["M"]:
answer+="M"
else: answer+="J"
if dict_list["A"]<dict_list["N"]:
answer+="N"
else: answer+="A"
return answer
'코딩테스트 > 나혼자코테(나코테)' 카테고리의 다른 글
KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2022.10.30 |
---|---|
16926번 배열 돌리기1[다시!] (0) | 2022.09.17 |
이코테) 개미전사 (0) | 2022.08.25 |