[백준] 14171번: Cities and States

    🔎 문제

    농부 존은 소들의 지적인 자극을 주기 위해 축사 벽에 대형 미국 지도를 붙여 놓았습니다. 소들은 헛간에서 이 지도를 바라보며 많은 시간을 보내면서 몇 가지 흥미로운 패턴을 발견하기 시작했습니다. 예를 들어, 미시간주 플린트와 플로리다주 마이애미는 매우 특별한 관계를 가지고 있는데, '플린트'의 첫 두 글자는 마이애미의 주 코드(“FL”)를, '마이애미'의 첫 두 글자는 플린트의 주 코드(“MI”)를 나타냅니다.

    두 도시가 이 속성을 만족하고 서로 다른 주에서 왔다면 '특별한 쌍'이라고 가정해 보겠습니다. 소들은 얼마나 많은 특별한 도시 쌍이 존재하는지 궁금해하고 있습니다. 소들이 이 재미있는 지리적 퍼즐을 풀 수 있도록 도와주세요!

    입력

    입력의 첫 줄에는 지도에 있는 도시의 수인 N(1≤N≤200,000)이 들어 있습니다.

    다음 N 줄에는 각각 두 개의 문자열, 즉 도시 이름(최소 2개에서 최대 10개의 대문자로 이루어진 문자열)과 두 글자로 이루어진 주 코드(대문자 2개로 이루어진 문자열)가 포함됩니다. 주 코드는 실제 미국 주가 아닌 ZQ와 같은 것일 수 있다는 점에 유의하세요. 같은 이름을 가진 여러 도시가 존재할 수 있지만 서로 다른 주에 속해 있습니다.

    출력

    특수한 도시 쌍의 수를 출력합니다.

     

    예제 입력 1 복사

    6
    MIAMI FL
    DALLAS TX
    FLINT MI
    CLEMSON SC
    BOSTON MA
    ORLANDO FL
    
    

    예제 출력 1 복사

    1
    

    💡풀이과정

    플로리다 마이애미 : FL MI
    미시건 플린트 : MI FL
    도시의 앞 2글자와 주 코드가 서로 교차 매칭되는 2개의 도시를 Special Pair라 한다.
    import sys
    input = sys.stdin.readline
    cnt = 0
    dic = dict()
    for _ in range(int(input())):
        city, state = input().split()
        a = city[:2]
        if a == state:
            continue
        dic[state+a] = dic.get(state+a, 0)+1
        cnt += dic.get(a+state, 0)
    print(cnt)

    🤩 상호관계 확인하는 코드 자세히 보기

        pair = a + state
        reverse_pair = state + a
        # 상호 관계 확인
        cnt += dic.get(reverse_pair, 0)
        dic[pair] = dic.get(pair, 0) + 1

     

    'Python > 코딩 테스트' 카테고리의 다른 글

    [백준] 1931번: 회의실 배정  (0) 2024.11.19
    [백준] 13220번 Secret  (6) 2024.11.12
    [백준] 23905번 Countdown  (3) 2024.11.11
    [동적계획법] N으로 표현  (0) 2024.11.08
    [백준] 15829번: Hashing  (1) 2024.11.07

    댓글