아기깨비
아기깨비의 코딩방망이
아기깨비
전체 방문자
오늘
어제
  • 전체보기 (170)
    • Today I Learned (TIL) (0)
      • CS (0)
      • Python (0)
    • Algorithm (170)
      • BAEKJOON (168)
      • Programmers (1)
      • SW Expert Academy (1)
    • Experience (0)
      • 삼성 청년 SW 아카데미 (2022) (0)
      • 혁신성장 청년인재 집중양성 (2019) (0)

인기 글

최근 글

hELLO · Designed By 정상우.
아기깨비

아기깨비의 코딩방망이

[백준 / Python 파이썬] 25957번 - 단어 우월 효과 (캠브릿지 대학의 연구결과)
Algorithm/BAEKJOON

[백준 / Python 파이썬] 25957번 - 단어 우월 효과 (캠브릿지 대학의 연구결과)

2023. 8. 6. 21:11

[Silver II] 단어 우월 효과 (캠브릿지 대학의 연구결과) - 25957


문제 링크

성능 요약

메모리: 66836 KB, 시간: 472 ms

분류

자료 구조, 해시를 사용한 집합과 맵, 정렬, 문자열, 트리를 사용한 집합과 맵

문제 설명

캠릿브지 대학의 연결구과에 따르면, 한 단어 안에서 글자가 어떤 순서로 배되열어 있는지는 중요하지 않고, 첫 번째와 마지막 글자가 올바른 위치에 있는 것이 중하요다고 한다. 나머지 글들자은 완전히 엉진망창의 순서로 되어 있라을지도 당신은 아무 문제 없이 이것을 읽을 수 있다. 왜하냐면, 인간의 두뇌는 모든 글자를 하하나나 읽는 것이 아니라 단어 하나를 전체로 인하식기 때이문다.

그렇다, 우리는 이렇게 단어의 순서가 섞어여있도 이 지문을 아지렇무도 않게 읽을 수 있다. 그래서 우리는 이으것로 문제를 내기로 했다.

문제는 간하단다. 어떤 문장을 구성할 수 있는 문자의 순서가 섞이지 않은 N개의 단들어이 주진어다. 그리고 이 N개의 단어들을 이용해 만들어진 문장 S가 주어진다. 단, S를 구하성는 각 단어는 맨 앞 문자와 맨 뒤 문자가 고정된 채 나머지 문자들은 무위작로 배열될 수 있다. 예를 들어, “캠브릿지” ⇒ “캠릿브지” 와 같은 식이다.

 N개의 단어는 모두 사용될 수도, 사용되지 않는 단어가 있을 수도, 여러 번 사용되는 단어가 있을 수도 있다.

이런 식으로 각 단어가 섞인 문장 S가 주어질 때 문장 S를 섞이지 않은 형태로 다시 배하열여 출하시력오.

입력

첫째 줄에는 원래 문장에 쓰인 단어의 수 N이 주어진다. (1≤N≤2000001≤≤200000)

두 번째 줄부터 N개의 줄에 단어가 주어진다. 각 단어의 길이는 11 이상 88 이하이다. 중복된 단어는 주어지지 않으며, 원래 단어를 하나로 정할 수 없는 경우는 주어지지 않는다. (즉, 맨 앞 문자와 맨 뒤 문자를 제외한 나머지 문자들의 배열만 다른 단어는 주어지지 않는다.)

 (N+2)(+2)째 줄에는 문장 S에 들어있는 단어의 수 M이 주어진다. (1≤M≤2000001≤≤200000)

마지막 줄에는 총 M개의 섞여 있는 단어로 이루어진 문장 S가 주어진다. 각 단어는 공백으로 구분되어 있다.

출력

첫 번째 줄에 문장의 각 단어의 문자 순서를 원래대로 배치한 결과를 출력하시오.


import sys
input = sys.stdin.readline


def word_trans(w):
    if len(w) > 2:
        wm = sorted(w[1:-1])
        w = w[0] + "-" + w[-1] + "-" + "".join(wm)
    elif len(w) == 2:
        w = w[0] + "-" + w[1]
    return w


N = int(input())

words = dict()
for _ in range(N):
    word = input().strip()
    new_word = word_trans(word)

    if new_word not in words:
        words[new_word] = word

M = int(input())
words_s = list(input().split())

for i in range(M):
    answer = word_trans(words_s[i])
    words_s[i] = words[answer]

result = " ".join(words_s)
print(result)

'Algorithm > BAEKJOON' 카테고리의 다른 글

[백준 / Python 파이썬] 2502번 - 떡 먹는 호랑이  (0) 2023.08.13
[백준 / Python 파이썬] 1342번 - 행운의 문자열  (0) 2023.08.13
[백준 / Python 파이썬] 21396번 - 이진수 더하기  (0) 2023.08.06
[백준 / Python 파이썬] 4848번 - 집합 숫자 표기법  (0) 2023.08.06
[백준 / Python 파이썬] 3758번 - KCPC  (0) 2023.07.18
    'Algorithm/BAEKJOON' 카테고리의 다른 글
    • [백준 / Python 파이썬] 2502번 - 떡 먹는 호랑이
    • [백준 / Python 파이썬] 1342번 - 행운의 문자열
    • [백준 / Python 파이썬] 21396번 - 이진수 더하기
    • [백준 / Python 파이썬] 4848번 - 집합 숫자 표기법
    아기깨비
    아기깨비
    아기깨비가 공부하는 일상을 기록하는 블로그 입니다.

    티스토리툴바