입력 첫 번째 줄 테스트 케이스 수 두 번째 줄부터 문자열 출력 문자열에 대해서 숫자만 뽑아서 비 내림차순으로 출력(비 내림차순에 대해서는 문제 내용에 쓰여있다) 문제풀이 테스트 케이스 수를 입력받고 다음 줄부터는 문자열에서 문자를 제외하고 숫자만 뽑아서 비 내림차순으로 정렬하여 출력해야 하는데 구분한다고 하면 split함수가 생각날 것이다. 하지만 일반적인 split함수로는 문자 하나에 대해서만 구분할 수 있는데 re라이브러리 안에 있는 split함수를 쓰면 구분할 문자가 여러 개여도 구분할 수 있다. re — 정규식 연산 — Python 3.10.2 문서 scanf() 시뮬레이션 파이썬에는 현재 scanf()에 해당하는 것이 없습니다. 정규식은 일반적으로 scanf() 포맷 문자열보다 강력하지만, 더..
입력 첫 번째 줄에는 테스트 케이스 수 두 번째 줄 ~ 네 번째 줄까지 n 출력 n에 대한 순서 쌍 문제 풀이 간단하게 그림을 그리면 사칙 연산으로 순서 쌍을 나눌 수 있다. 순서 쌍을 이루는 수들은 서로 달라야 하기 때문에 4일 때 2 2는 순서 쌍이 되지 않는다. 해당 부분만 주의하면 쉽게 코드를 짤 수 있다. 완성된 코드!!👍 for _ in range(int(input())): x = int(input()) n = x//2 l = [] for i in range(1, n+1): if i < x - i: l.append(f'{i} {x - i}') print(f'Pairs for {x}: ' + ', '.join(val for val in l))
입력 첫 번째 줄에는 A팀 인원수, B팀 인원수, 득점한 선수 인원수 두 번째 줄에는 A팀 선수들의 이름 세 번째 줄에는 B팀 선수들의 이름 네 번째 줄에는 득점한 선수들의 이름 출력 득점한 인원이 더 많은 선수팀 출력, A팀과 B팀의 득점한 인원이 같을 때 "TIE" 출력 문제 풀이 간단하게 득점한 선수가 A팀, B팀에 얼마나 있는지 확인하여 결과값을 출력해주면 된다. 또 중복된 코드가 있어서 함수를 하나 만들어 불필요한 코드를 없앴다. 완성된 코드!!👍 def p_count(p_l): cnt = 0 for val in p_l: cnt += g_p.count(val) return cnt a,b,p = map(int, input().split()) a_p = input().split() b_p = inp..
입력 첫 번째 줄에는 배열 크기 두번째 줄에는 배열 안의 값들 세 번째 줄에는 테스트 케이스 개수 네 번째 줄부터는 배열 위치(시작, 끝)에 해당하는 값들의 누적 합 출력 배열 1번째 요소에서 1번째 요소까지의 합 = 5 배열 0번째 요소에서 9번째 요소까지의 합 = 42 배열 5번째 요소에서 7번째 요소까지의 합 = 12 배열 9번째 요소에서 9번째 요소까지의 합 = 1 배열 1번째 요소에서 8번째 요소까지의 합 = 40 문제 풀이 내장 함수 sum을 이용하면 쉽게 풀 수 있다. 완성된 코드 n = int(input()) n_l = list(map(int, input().split())) for _ in range(int(input())): a, b = map(int, input().split()) p..
문제 풀이 보자마자 그림을 한번 그려봤다. 검은색 : 테스트 케이스의 입, 출력 빨간색 : 테스트 케이스 출력에서의 1과 자기 자신 파란색 : 찾아낸 규칙 처음에 짜 본 코드다. sorted 내장 함수로 입력받은 수들을 정렬하였다. 또한 N의 약수의 개수가 홀수일 때, 짝수일 때를 판별하여 N을 구하도록 했다. ex) 홀수일 경우, N의 약수의 개수 = 1, input = 5, out = 25 25의 약수는 1을 제외한 5 뿐이기 때문에 제곱하여 반환시켜주면 25가 나온다. ex) 짝수일 경우, 입력받은 약수들이 list형태로 있기 때문에 최솟값 * 최댓값을 하면 N이 나오게 된다. N = int(input()) l = sorted(map(int, input().split())) if N % 2 == 1..
문제 풀이 이해가 잘 안 될 때 직접 그림을 그려보는 것도 좋은 방법이다. 1열 : N, 2열 : 0이 등장하는 횟수, 3열 : 1이 등장하는 횟수라고 보면 될 것 같다. 이렇게 쓰고보니 2열과 3열에서 규칙이 보여 아래와 같이 작성해봤다. 1의 개수처럼 0도 피보나치로 가능하였기 때문에 아래의 코드처럼 돌렸지만 시간 초과가 나왔다. import sys def fibonacci0(n): if n == 0: return 1 elif n == 1: return 0 else: return fibonacci0(n-1)+fibonacci0(n-2) def fibonacci1(n): if n == 0: return 0 elif n == 1: return 1 else: return fibonacci1(n-1)+fib..
문제 풀이 문제에 있는 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수를 리스트에 저장해두고 입력을 다른 리스트에 받아 두 리스트의 차이값을 출력하면 되는 문제이다. 완성된 코드!!👍😊 chess = [1, 1, 2, 2, 2, 8] count = list(map(int, input().split())) for i in range(len(chess)): chess[i] -= count[i] print(' '.join(map(str, chess)))
문제 풀이 문제에서 N=4인 경우에 버린 카드는 1 3 2가 되고 남는 카드는 4가 되어 출력 결과가 1 3 2 4가 되길래 짝수 홀수로 나누면 될 줄 알았다. 하지만 테스트 케이스 1번에서 출력 결과가 1 3 5 7 4 2 6이 되는 것에 대해서 도무지 이해가 안 되어 결국 그림을 그려 이해를 하고 어떻게 하면 풀 수 있을지를 알아냈다. 그림에서와 같이 cnt 값에 따라서의 2가지의 작업을 돌리면 되었다. 1. cnt가 홀수면 첫 번째 원소 값을 원래 리스트에서 pop 하고 다른 리스트에 append 2. cnt가 짝수면 첫 번째 원소 값을 원래 리스트에 append 하고 원래 리스트에서 첫 번째 위치에 있는 원소 값을 pop 대부분의 사람들은 데크(dequeue)로 푸셨던데 아직 본인은 쓸 줄 몰라 ..
문제 풀이 명령어 6가지 중 push 명령어는 해당 명령어만 실행하고 출력은 없다. 테스트 케이스 입력 부분을 보면 파라미터를 2개, 1개 받는 경우가 있기 때문에 함수를 써서 하나의 인자는 받고 다른 인자는 default로 두어 해당 명령어가 들어오면 명령어 역할에 맞게 실행시켜주면 될 것 같았다. def 함수명(a, b=0): return queue는 리스트 구조를 이용하였고, 명령어를 받기 위해 빠른 입출력의 sys.stdin.readline()을 이용하였다. 그냥 입출력을 쓰면 시간 초과가 나게 된다. 또한 입력 명령어 중에 push 같은 경우 공백을 포함한 두번째 인자 값을 받아서 정수형(int)으로 만들어 줘야 하므로 split함수로 입력받았다. cmd = sys.stdin.readline()..
문제 풀이 두 수의 제한 조건은 10,000,000 이하. 입력을 1과 10000000을 입력받았을 때, 반복문으로 배열을 생성하게 되면... 시간 초과가 날게 분명해서 반복문은 아닐 거라 판단했다. 규칙이 보일거라 생각한다. 입력받은 값에서 1을 빼면 몫과 나머지의 값들이 행열의 값들과 일치하고 입력받은 각각의 행열들의 사칙연산을 하고 절대값을 씌워주면 직선거리 값이 나온다는 것을 알 수 있다. 완성된 코드!👍😊 a, b = map(int, input().split()) a -= 1 b -= 1 print(abs(a // 4 - b // 4) + abs(a % 4 - b % 4))