코딩테스트 132

[백준 python 2485] 가로수

[Silver IV] 가로수 - 2485 문제 링크 성능 요약 메모리: 40952 KB, 시간: 116 ms 분류 유클리드 호제법, 수학, 정수론 제출 일자 2023년 12월 18일 22:55:47 문제 설명 직선으로 되어있는 도로의 한 편에 가로수가 임의의 간격으로 심어져있다. KOI 시에서는 가로수들이 모두 같은 간격이 되도록 가로수를 추가로 심는 사업을 추진하고 있다. KOI 시에서는 예산문제로 가능한 한 가장 적은 수의 나무를 심고 싶다. 편의상 가로수의 위치는 기준점으로 부터 떨어져 있는 거리로 표현되며, 가로수의 위치는 모두 양의 정수이다. 예를 들어, 가로수가 (1, 3, 7, 13)의 위치에 있다면 (5, 9, 11)의 위치에 가로수를 더 심으면 모든 가로수들의 간격이 같게 된다. 또한, ..

[백준 python 1735] 분수 합

[Silver III] 분수 합 - 1735 문제 링크 성능 요약 메모리: 31120 KB, 시간: 44 ms 분류 유클리드 호제법, 수학, 정수론 제출 일자 2023년 12월 16일 14:05:00 문제 설명 분수 A/B는 분자가 A, 분모가 B인 분수를 의미한다. A와 B는 모두 자연수라고 하자. 두 분수의 합 또한 분수로 표현할 수 있다. 두 분수가 주어졌을 때, 그 합을 기약분수의 형태로 구하는 프로그램을 작성하시오. 기약분수란 더 이상 약분되지 않는 분수를 의미한다. 입력 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. 출력 첫째 줄에 구하고자 하는 기약분수의 분자와 분모를 뜻하는 두 개의 자연수를 빈..

[백준 python 10815] 숫자 카드

[Silver V] 숫자 카드 - 10815 문제 링크 성능 요약 메모리: 125176 KB, 시간: 672 ms 분류 이분 탐색, 자료 구조, 해시를 사용한 집합과 맵, 정렬 제출 일자 2023년 12월 13일 16:41:54 문제 설명 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫..

[백준 python 11478] 서로 다른 부분 문자열의 개수

[Silver III] 서로 다른 부분 문자열의 개수 - 11478 문제 링크 성능 요약 메모리: 240712 KB, 시간: 508 ms 분류 자료 구조, 해시를 사용한 집합과 맵, 문자열, 트리를 사용한 집합과 맵 제출 일자 2023년 12월 13일 16:17:36 문제 설명 문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오. 부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다. 예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다. 입력 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로..

[백준 python 1269] 대칭 차집합

[Silver IV] 대칭 차집합 - 1269 문제 링크 성능 요약 메모리: 80432 KB, 시간: 216 ms 분류 자료 구조, 해시를 사용한 집합과 맵, 트리를 사용한 집합과 맵 제출 일자 2023년 12월 13일 15:32:08 문제 설명 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다. 예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다...

[백준 python 1764] 듣보잡

[Silver IV] 듣보잡 - 1764 문제 링크 성능 요약 메모리: 37092 KB, 시간: 3820 ms 분류 자료 구조, 해시를 사용한 집합과 맵, 정렬, 문자열 제출 일자 2023년 12월 13일 14:41:16 문제 설명 김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다. 듣도 못한 사람의..

[백준 python 1620] 나는야 포켓몬 마스터 이다솜

[Silver IV] 나는야 포켓몬 마스터 이다솜 - 1620 문제 링크 성능 요약 메모리: 55700 KB, 시간: 240 ms 분류 자료 구조, 해시를 사용한 집합과 맵 제출 일자 2023년 12월 13일 14:27:53 문제 설명 안녕? 내 이름은 이다솜. 나의 꿈은 포켓몬 마스터야. 일단 포켓몬 마스터가 되기 위해선 포켓몬을 한 마리 잡아야겠지? 근처 숲으로 가야겠어. (뚜벅 뚜벅) 얏! 꼬렛이다. 꼬렛? 귀여운데, 나의 첫 포켓몬으로 딱 어울린데? 내가 잡고 말겠어. 가라! 몬스터볼~ (펑!) 헐랭... 왜 안 잡히지?ㅜㅜ 몬스터 볼만 던지면 되는 게 아닌가...ㅜㅠ (터벅터벅) 어? 누구지? 오박사 : 나는 태초마을의 포켓몬 박사 오민식 박사라네. 다솜아, 포켓몬을 잡을 때는, 일단 상대 포켓..

[백준 python 7785] 회사에 있는 사람

[Silver V] 회사에 있는 사람 - 7785 문제 링크 성능 요약 메모리: 48332 KB, 시간: 188 ms 분류 자료 구조, 해시를 사용한 집합과 맵 제출 일자 2023년 12월 12일 22:28:52 문제 설명 상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다. 각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다. 상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 로그에 기록..

[백준 python 18870] 좌표 압축

[Silver II] 좌표 압축 - 18870 문제 링크 성능 요약 메모리: 144340 KB, 시간: 2216 ms 분류 값 / 좌표 압축, 정렬 제출 일자 2023년 12월 11일 22:09:08 문제 설명 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 입력 첫째 줄에 N이 주어진다. 둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다. 출력 첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서..

[백준 python 1181] 단어 정렬

[Silver V] 단어 정렬 - 1181 문제 링크 성능 요약 메모리: 36396 KB, 시간: 816 ms 분류 정렬, 문자열 제출 일자 2023년 12월 11일 21:27:08 문제 설명 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 단, 중복된 단어는 하나만 남기고 제거해야 한다. 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. n = int(input()) li = set() for _..