본문 바로가기

전체 글115

[BOJ/PYTHON] 4583. 거울상 백준 문제 링크: https://www.acmicpc.net/problem/4583 문제 요약 거울상 관계인 글자는 글자를 거울로 비추었을 때 거울에 반사되기 전 모습을 유추 가능 서로 거울상: b, d / p, q 자신과 거울상: i, o, v, w, x 거울상이 있으면 거울상 모습 출력, 없으면 INVALID를 출력. 핵심 아이디어 자신과 거울상인 경우의 self_mirror_list 리스트, 짝을 이뤄 거울상인 pair_mirror_list 리스트를 만들어줬다. 거울에 비춰지기 전 모습을 구해야 하는데, b가 오면 d를, d가 오면 b를, p가 오면 q를, q가 오면 p를 넣어주면 된다. 이것을 위해 pair_mirror_list에 각자의 거울상이 본인 바로 다음에 오게 배치해놨다. b 다음에 d,.. 2023. 6. 1.
[BOJ/PYTHON] 5052. 전화번호 목록 백준 문제 링크: https://www.acmicpc.net/problem/5052 문제 요약 주어진 전화번호 목록이 일관성이 있는지 없는지 구하기 일관성 있는 번호: 한 번호가 다른 번호의 접두어인 경우가 있으면 안 됨 핵심 아이디어 입력을 문자열로 받아서 정렬하면 숫자 크기와 상관 없이 사전순으로 정렬되기 때문에 맨 앞부터 순서대로 정렬된다. 정렬을 하고 시작하기 때문에 바로 다음 것과 비교하면 된다. i번째 번호를 기준으로 삼았을 때, i+1번째 번호를 i번째 번호 길이까지만 보고, 둘이 동일하면 일관성 없는 것으로 보면 된다. 테스트 케이스 중 하나인 911, 91125426로 예시를 들어보자면 i번째 번호인 911을 기준으로 본다. 911의 길이는 3이다. 91125426을 앞 3개까지만 보면 .. 2023. 6. 1.
[BOJ/PYTHON] 14425. 문자열 집합 백준 문제 링크: https://www.acmicpc.net/problem/14425 문제 요약 check_list중 몇 개가 집합 s에 포함돼있는지 구하기 핵심 아이디어 if (check_list 중 하나) in (집합 s 문자열) 이면 카운트를 올려주면 된다. 풀이 # silver3-14425. 문자열 집합 import sys input = sys.stdin.readline n, m = map(int, input().split()) s_list = [input().rstrip() for _ in range(n)] # 집합 s에 포함돼있는 문자열 check_list = [input().rstrip() for _ in range(m)] # 검사해야 하는 문자열 cnt = 0 for string in ch.. 2023. 6. 1.
[BOJ/PYTHON] 15904. UCPC는 무엇의 약자일까? 백준 문제 링크: https://www.acmicpc.net/problem/15904 문제 요약 축약해서 UCPC가 되면 I love UCPC 출력, 안 되면 I hate UCPC 출력 핵심 아이디어 대문자만 뽑았을 때 무조건 UCPC만 나와야 하는 건 아니다. 축약해서 UCPCC가 되는 경우도 UCPC로 축약 가능하기 때문에 대문자만 이어붙였을 때 ‘UCPC’와 일치하는지로 풀면 안 된다. I love UCPC도 대문자만 보면 IUCPC이지만 UCPC로 축약 가능하다. 결국, 대문자만 봤을 때 뭐가 있든 UCPC가 순서대로 존재하기만 하면 된다. 인덱스 변수를 지정해주고 U, C, P, C가 순서대로 들어있는 UCPC 리스트에서 UCPC[index]가 이번에 보는 대문자와 동일하면 리스트에 넣어주는 방.. 2023. 6. 1.
[BOJ/PYTHON] 2866. 문자열 잘라내기 백준 문제 링크: https://www.acmicpc.net/problem/2866 문제 요약 테이블을 세로로 읽어 문자열 만들 수 있음 가장 위 행 지워도 열에서 중복 문자열 없으면 가장 위 행 지워주고 카운트 1 증가 중복 문자열 있으면 카운트 출력 후 종료 핵심 아이디어 세로로 읽은 문자열 리스트를 먼저 만들어준다. 그 문자열 리스트에서 일단 가장 위 행을 지워주고, 중복 문자 체크를 한다. set으로 중복 제거한 것의 개수랑 중복 제거 안 한 것의 개수가 같다면 중복이 존재한다는 말이기 때문에 카운트를 출력하고 종료한다. 아닐 경우 카운트를 증가시켜주면 된다. 문제에서는 행 지워도 문제 없으면 → 지우기 인데, 일단 지우고 중복 여부를 확인하는 것이 구현 상으로도 편리하고 별도의 문제도 없다. 풀.. 2023. 6. 1.
[BOJ/PYTHON] 8892. 팰린드롬 백준 문제 링크: https://www.acmicpc.net/problem/8892 문제 요약 팰린드롬은 어느 방향으로 읽어도 항상 같은 방법으로 읽을 수 있는 단어인데, 단어 k개 주어졌을 때, 팰린드롬을 찾으면 된다. 공책에 있는 단어들 중 두 단어를 합쳐 팰린드롬이 나와야 한다. 핵심 아이디어 두 단어씩 다 합쳐보고 합친 애랑 거꾸로 한 애랑 같으면 팰린드롬 리스트에 넣으면 된다. 풀이 # silver5-8892. 팰린드롬 import sys input = sys.stdin.readline t = int(input()) # 테스트 케이스 for _ in range(t): k = int(input()) # 단어의 수 words = [list(map(str, input().rstrip())) for _.. 2023. 6. 1.