목록PS (14)
archive
✏️ 문제 10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net ✏️ 풀이 testcase 개수가 주어져있지 않은 문제이다. 단순히 무한반복문을 사용하면 EOF가 입력으로 들어왔을 때 EOFError가 발생한다. 따라서 이에 대한 처리를 해줘야 한다. 파이썬에서는 try-except를 이용한다. EOFError 가 발생한 경우 무한반복문을 탈출하여 프로그램이 종료되도록 한다. ✏️ 코드 while True: try: a, b = map(int, input().split()) print(a+b) except EOFError: break ✏️ 생각 알고리즘 문제에서 try-except는 처음 써보는 것 같다
✏️ 문제 3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net ✏️ 풀이 10개의 수를 입력받아 42로 나눈 나머지 중, 서로 다른 값의 개수를 출력한다. 배열의 모든 원소를 42로 나눠준 후, set으로 형변환하여 중복 원소를 제거한 후 set의 원소의 개수를 출력하였다. ✏️ 코드 arr = [int(input()) for _ in range(10)] arr = list(map(lambda x : x%42, arr)) print(len(set(arr))) ✏️ 생각 쉬운 문제이지만 나에게 비교적 덜 익숙한 리스트 컴프리헨션, map, lambda, set 등을 모두 사용해봐서 기..
✏️ 문제 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net ✏️ 풀이 - 1차시도 1부터 10001 까지에 대해 해당 자연수가 1부터 10000까지의 자연수 중 하나를 생성자로 가지는 지 판별하였다. 결과 : 시간 초과(O(n^2)) for num in range(1,10001): for i in range(1,10000): if i > num: continue if num == i + sum(list(map(int, list(str(i))))): break ..
✏️ 문제 3085번: 사탕 게임 첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다. www.acmicpc.net ✏️ 풀이 SWAP 할 수 있는 모든 경우의 수를 탐색해야 한다. 탐색 방향은 우측, 아래로 정하였다. 탐색 대상 원소와 우측/아래 원소와 다를 경우 SWAP하고, 배열에서 가장 긴 연속 부분의 길이를 구한다. 길이를 구한 후에는 다음 탐색을 위해 배열을 원상복구 시킨다. (다시 SWAP 해줌) 배열에서 가장 긴 연속 부분의 길이를 구할 때에는 열과 행에 대해 각각 연속된 길이일 경우 count를 증가시키고, 가장 큰 count를 구할 수 있도록 구현하였다. ✏️ 코드 size = int(input()) arr = [list(input()) for _ in range(size)]..
✏️ 문제 10448번: 유레카 이론 프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어 www.acmicpc.net ✏️ 풀이 수열 Tn은 Tn = n(n+1)/2의 공식을 갖는다. 이러한 수열 Tn을 저장하는 배열을 선언하여, 미리 삼각수 배열을 만들어 둔다. 이 때 중요한 것은, 시간 초과를 피하기 위해 배열의 크기를 적절하게 설정해야 한다. 문제에서 자연수 K가 1000 이하라고 명시되어 있으므로, 적절히 T45(= 45*46/2= 1035) 까지의 삼각수를 저장한다. 그 후, for문 돌면서 현재 자연수가, 삼각수 배열에서 3개를 선택하여 이를 합친 ..
✏️ 문제 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net ✏️ 풀이 아홉 명의 난쟁이 중 선택한 일곱 명의 키의 합이 100이 될 경우를 찾아야 한다. 9C7의 결과를 완전 탐색하며, 결과에 맞는 조합을 찾을 시 break한다. 조합들을 구하기 위해 itertools.combination()을 사용하였다. 동일한 방식으로, 9C2의 조합에 대해 탐색하며 모든 원소의 합에서 선택한 두 원소의 합을 빼는 방식으로 구현해도 된다. ( 참고 ↓ ) [파이썬] itertools모듈 리스트 조합 관련된 알고리즘 문제를 풀다 보..