
https://school.programmers.co.kr/learn/courses/30/lessons/118666
처음 코드보다 간결하게 코드를 구현하였다. 2차원 배열이 아닌 딕셔너리를 사용했으며, 아래 블로그를 참고해 구현했다.
딕셔너리를 사용하니 구현이 훨씬 간단하다. if else문도 최대한 간결하게 작성하였다.
def solution(survey, choices):
    answer = ''
    jipo = {"R":0, "T":0, "C":0, "F":0, "J":0, "M":0, "A":0, "N":0}     # 지표 저장 (딕셔너리 활용)
    
    for i in range(len(survey)):
        left = survey[i][0]
        right = survey[i][1]
        
        if choices[i] - 4 < 0 :        # 왼쪽 지표 선택 (1<=점수<=3)
            jipo[left] += 4-choices[i]
        elif choices[i] - 4 > 0:        # 오른쪽 지표 선택 (5<=점수<=7)
            jipo[right] += choices[i]-4
    answer += "R" if jipo["R"] >= jipo["T"] else "T"
    answer += "C" if jipo["C"] >= jipo["F"] else "F"
    answer += "J" if jipo["J"] >= jipo["M"] else "M"
    answer += "A" if jipo["A"] >= jipo["N"] else "N"
    return answer
결과 : 모든 테스트케이스를 통과했다 🥳
오류 원인 및 수정 내용
- 처음 작성했던 코드의 오류 부분을 수정했다.
 - score 배열을 선언할 때, 처음에는 다음과 같이 배열을 선언했다.
 score = [[0]*2]*4
- 하지만, 이렇게 2차원 배열을 선언하는 경우, 얕은 복사가 되어 같은 주소 값을 가진 배열이 생성되게 된다.
 - 하나의 [0,0] 배열을 4번 가리키고 있기 때문에, 한 값을 수정했을 때 4곳의 값이 모두 바뀌는 것처럼 보이는 것이다.
 - 4개씩 동일한 주소를 가리키고 있기 때문에, 메모리에 실제도 존재하는 값은 총 8개가 아니라 2개뿐이다.
 - 따라서 다음과 같이 코드를 수정해야 한다.
 score = [[0]*2 for i in range(4)]프로그래머스 질문하기 기능을 통해 다른 분의 답변을 받아볼 수 있었다! 😊 덕분에 새로운 내용을 알게 되었다.
def solution(survey, choices):
    answer = ''
    
    # score = [[0]*2]*4       # R/T, C/F, J/M, A/N
    score = [[0]*2 for i in range(4)]		## 오류 해결 부분!
    type = [['R', 'T'], ['C', 'F'], ['J', 'M'], ['A', 'N']]     # 유형 저장
    
    for i in range(len(survey)):
        if choices[i] >= 1 and choices[i] <= 3:
            per = survey[i][0]            
        else:
            per = survey[i][-1]
        
        addscore = 4 - choices[i] if choices[i] <= 4 else choices[i] - 4
        for i in range(4):
            for j in range(2):
                if per == type[i][j]:
                    print(per, type[i][j], addscore)
                    score[i][j] += addscore
        # 같은 열(0열 또는 1열)의 점수 값이 모두 + 되어 갱신됨
        # 예) score[0][0] 값이 + 되어야 하면, score[0][0], score[1][0], score[2][0], score[3][0] 값이 모두 증가함
    for i in range(4):
        if score[i][0] == score[i][1]:
            if ord(type[i][0]) < ord(type[i][1]):
                answer += type[i][0]
            else:
                answer += type[i][1]
        else:
            if score[i][0] > score[i][1]:
                answer += type[i][0]
            else:
                answer += type[i][1]
    
    print(score)
    return score
solution(["AN", "CF", "MJ", "RT", "NA"], [5, 3, 2, 7, 5])
# 오류 점검 중
# 테스트 케이스 1 오답, 테스트 케이스 2 통과
def solution(survey, choices):
    answer = ''
    
    score = [[0]*2]*4       # R/T, C/F, J/M, A/N
    type = [['R', 'T'], ['C', 'F'], ['J', 'M'], ['A', 'N']]     # 유형 저장
    
    for i in range(len(survey)):
        if choices[i] >= 1 and choices[i] <= 3:
            per = survey[i][0]            
        else:
            per = survey[i][-1]
        
        addscore = 4 - choices[i] if choices[i] <= 4 else choices[i] - 4
        for i in range(4):
            for j in range(2):
                if per == type[i][j]:
                    print(per, type[i][j], addscore)
                    score[i][j] += addscore
        # 같은 열(0열 또는 1열)의 점수 값이 모두 + 되어 갱신됨
        # 예) score[0][0] 값이 + 되어야 하면, score[0][0], score[1][0], score[2][0], score[3][0] 값이 모두 증가함
    for i in range(4):
        if score[i][0] == score[i][1]:
            if ord(type[i][0]) < ord(type[i][1]):
                answer += type[i][0]
            else:
                answer += type[i][1]
        else:
            if score[i][0] > score[i][1]:
                answer += type[i][0]
            else:
                answer += type[i][1]
    
    print(score)
    return score
solution(["AN", "CF", "MJ", "RT", "NA"], [5, 3, 2, 7, 5])
깔끔하게 짠 코드는 아니지만, 원인을 모르겠는 오류가 발생하여 현재 해당 오류가 생기는 이유를 찾는 중이다.
2차원 배열인 score 배열과 type 배열을 선언하여 type 배열에는 문제에서 주어진 R/T, C/F, J/M, A/N 유형을 저장하였다.
이후 점수 계산을 해서 score 배열에 type 배열에서 유형이 위치하는 곳과 동일한 위치에 점수를 추가하는 방식으로 진행했다.
그런데 예를 들어 score[0][0] 번째 배열에만 저장되어야 하는 점수가 score[1][0], score[2][0], score[3][0]에 모두 저장되는 등 동일한 열의 점수 배열 값이 모두 증가하는 모습이 나타난다.
왜인지 모르겠지만 해당 이유를 찾는 중이다.
(이 글을 읽으시는 분 중 해답을 아시는 분이 있다면, 댓글로 알려주시면 감사하겠습니다🥲)
+더 깔끔한 코드로 줄여볼 것이다.