관리 메뉴

솜씨좋은장씨

[BaekJoon] 25955번 : APC는 쉬운 난이도 순일까, 아닐까? (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 25955번 : APC는 쉬운 난이도 순일까, 아닐까? (Python)

솜씨좋은장씨 2022. 11. 27. 12:02
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 APC는 쉬운 난이도 순일까, 아닐까? 입니다.

 

25955번: APC는 쉬운 난이도 순일까, 아닐까?

선우는 APC 문제를 만들기 위해 고민하며 역대 APC들을 둘러보던 와중, 이 대회들의 문제가 난이도가 쉬운 순으로 배치되어 있는 경향을 발견했다! 문제 출제가 완료되고 올해도 이러한 기조를 지

www.acmicpc.net

🧑🏻‍💻 문제 풀이

문제의 난이도 목록이 주어지면

해당 난이도가 쉬운난이도 순으로 잘 정렬이 되어있는지 아닌지 확인하고

정렬이 잘 되어있지 않는다면 제대로 정렬되어있지 않은 부분을 찾아 제대로 정렬한 값을 출력하는 문제입니다.

난이도 정렬에는 아래의 방법을 활용하였습니다.

2021.12.06 - [Programming/Python] - [Python] 내가 원하는 순서대로 리스트를 정렬하는 다양한 방법!

 

[Python] 내가 원하는 순서대로 리스트를 정렬하는 다양한 방법!

개발을 하다보면 종종 리스트의 값들을 내가 원하는 순서대로 정렬하고 싶을 때가 있습니다. 각 리스트 속 리스트의 값들의 두번째 값을 기준으로 오름차순 정렬을 하고 싶은 경우 또는 정말 내

somjang.tistory.com

difficulty_priority = {
    "B": 0, "S": 1, "G": 2, "P": 3, "D": 4
}

먼저 난이도를 나타내는 알파벳의 우선순위에 대한 dictionary 를 하나 만들어줍니다.

# B1 P1 G1 S1 D1 <- difficulty_list

difficulty_list = [(difficulty[0], int(difficulty[1:])) for difficulty in difficulty_list]
# -> [("B", 1), ("P", 1), ("G", 1), ("S", 1), ("D", 1)]    
sorted_list = sorted(difficulty_list, key=lambda x: (difficulty_priority[x[0]], -x[1]))
# -> [("B", 1), ("S", 1), ("G", 1), ("P", 1), ("D", 1)]

그리고 입력 받은 난이도 목록에서 알파벳과 숫자를 분리해줍니다.

그 후 sorted 의 key=lambda 와 아까 만들어둔 우선순위 dictionary 를 활용하여 난이도를 쉬운 순 부터 정렬합니다.

if sorted_list != difficulty_list:
    diff_list = []
    for sort_diff, diff in zip(sorted_list, difficulty_list):
        if sort_diff != diff:
            diff_list.append(sort_diff)

그 후 정렬한 난이도와 정렬하지 않은 난이도를 비교하며 다른지 확인합니다.

다른 부분이 있을 경우 diff_list 에 넣어두었다가 나중에 정답 문자열에 추가합니다.

answer = "KO\n" + " ".join(["".join(list(map(str,difficulty))) for difficulty in diff_list])

전체 코드는 아래를 참고해주세요.

🧑🏻‍💻 코드 ( Solution )

def APC(difficulty_list):
    answer = "OK"
    difficulty_priority = {
        "B": 0, "S": 1, "G": 2, "P": 3, "D": 4
    }
    
    difficulty_list = [(difficulty[0], int(difficulty[1:])) for difficulty in difficulty_list]
    
    sorted_list = sorted(difficulty_list, key=lambda x: (difficulty_priority[x[0]], -x[1]))
    
    if sorted_list != difficulty_list:
        diff_list = []
        for sort_diff, diff in zip(sorted_list, difficulty_list):
            if sort_diff != diff:
                diff_list.append(sort_diff)
        answer = "KO\n" + " ".join(["".join(list(map(str,difficulty))) for difficulty in diff_list])
        
    return answer


if __name__ == "__main__":
    N = int(input())
    difficulty_list = input().split()
    
    print(APC(difficulty_list=difficulty_list))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments