문제 https://www.acmicpc.net/problem/8393 8393번: 합 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. www.acmicpc.net 코드 cnt = int(input()) print(sum(i for i in range(1,cnt+1))) 풀이 간단하게 풀이가 가능해 보여서 직관적으로 풀었다. 이럴경우 시간 복잡도는 O(n). ✔ 하지만 수학적으로 접근하면 1~n 까지의 합은 n(n+1)/2 즉, (n^2 + n)/2 로 한번의 계산으로 도출 가능하며, 이때 시간 복잡도는 O(1)로 대폭 감소한다. ✔ 문제를 풀이할 때 여러 방향으로 생각해보자. 다른 풀이 출처: https://www.acmicpc.net/source/13249601 n = int(i..
Algorithm/Beakjoon
문제 https://www.acmicpc.net/problem/1924 1924번: 2007년 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. www.acmicpc.net - 2월이 28일까지 있다. - 1월 1일이 월요일이다. 코드 month = [31,28,31,30,31,30,31,31,30,31,30,31] days = ["SUN","MON","TUE","WED","THU","FRI","SAT"] m, d = map(int, input().split()) print(days[((sum(month[i] for i ..
문제 https://www.acmicpc.net/problem/11720 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 코드 #1번 풀이 import sys sum = 0 numlist = sys.stdin.readlines() for c in numlist[1].rstrip(): sum += int(c) print(sum) 풀이 예제 4번을 보지 못하고 주어지는 수가 10 이상일 경우에는 어떻게 구분하지?... 이죠랄 떨고 있었음ㅋ 근데 진짜로 십의자리 이상인 숫자는 어떻게 구분할까?... 일의자리 숫자만 더 한다는 조건은 없었는데.. 어쨌든 문제를 너무 꼬아생각하는건 팩트같다.. 우선 r..
문제 https://www.acmicpc.net/problem/11719 11719번: 그대로 출력하기 2 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 www.acmicpc.net 코드 import sys texts = sys.stdin.read() print(texts, end='') 풀이 그 전에 푼 문제에서 배운 readlines와 read 메서드를 적용할 수 있는 문제다. 단 차이점은 빈 줄이 주어질 수 있고, 각 줄의 앞 뒤에 공백이 있을 수 있다는 것 → strip류 메서드(rstrip, lstrip, strip) 사용X readline..
문제 https://www.acmicpc.net/problem/11718 11718번: 그대로 출력하기 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시 www.acmicpc.net 코드 import sys for i in range(100): inputlist = str(sys.stdin.readline().strip()) #입력값 끝에 \n 제거 if inputlist =="": #공백 입력됐을 경우 탈출 break print(inputlist) 풀이 먼젓번에 풀었던 A+B-4문제와 동일하게 적용했다. readline으로 문자열을 읽어올 경우, 끝에..
문제 https://www.acmicpc.net/problem/10951 10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 코드 while True: try: a, b = map(int, input().split()) print(a+b) except: break 풀이 우선 처음 문제를 접했을 때 당황스러웠다.. 테스트 케이스에 대한 세부적인 설정이 없었기 때문... 몇 번을 반복해야 하는지 갈피를 못잡고, 우선 while True: 로 무한 반복을 돌렸는데, 당연히 오류가 났다ㅎ 테스트 케이스 횟수에 대한 특정 언급이 없는 경우에는, 테스트 케이스가 입력되지 않는 경우를 끝으로 가정한다. ➔ try - except 문을 ..
# silver 4 문제 https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 코드 Ver 1) #num이 소수인지 아닌지 판별하는 함수 def PrimeNum(num): if num == 0 or num == 1: # 0, 1에 대해 예외처리를 해줘야 함! return False for k in range(2, num): if num % k == 0: #2~n-1 로 나눴을 때 나눠짐 ==> 소수가 아님 return False return True #범위 i..
# bronze 3 문제 https://www.acmicpc.net/problem/2460 2460번: 지능형 기차 2 최근에 개발된 지능형 기차가 1번역(출발역)부터 10번역(종착역)까지 10개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. www.acmicpc.net 코드 1. max() 사용 O people = [0] #처음엔 기차에 0명 for i in range(1,11): #역 10개 순회 cnt =list(map(int,input().split())) #하차 = cnt[0]명, 승차 = cnt[1] people.append(people[2*(i-1)]-cnt[0]) #people[odd] = 승차 후 탑승객 - 하차 탑승..
# bronze 3 문제 https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 코드 num = input() nList = list(map(int, input().split())) min = max = nList[0] #최소, 최대값 임의로 세팅 for k in nList: if k max: max = k print(min, max) 풀이 파이썬 내장함수인 max, min 없이 최대, 최소를 구하는 함수를 구현 초..
# bronze 3 문제 https://www.acmicpc.net/problem/3460 3460번: 이진수 양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다. www.acmicpc.net 코드 cnt=int(input()) # 테스트 케이스 개수 for i in range(cnt): num = int(input()) #테스트 케이스 값 반복해서 입력받기 idx = 0 #이진수로 나타냈을 때 1의 위치 값 bin=[] #1의 위치 값 기록할 리스트 while True: if num%2 == 1: #나머지가 = 1 == 이진수로 나타냈을때 1인 곳 bin.append(idx..
문제 https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 코드 length = int(input()) numList = list(map(int, input().split())) cnt = 0 #소수가 아닌 수 카운팅 for num in numList: #리스트 안 숫자로 진행 if num == 1: #1은 소수에 포함되지 않으므로 continue로 빠져나옴, 소수 아닌수 +1 cnt+=1 continue for i in range(2,num): #1이 아닌 숫자에 대해 2부터 나누며 소수인지 판별 if num%i==..
문제 https://www.acmicpc.net/problem/2693 2693번: N번째 큰 수 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000 www.acmicpc.net 코드 - 2차원 배열 사용 cnt = int(input()) #테스트 케이스 개수 N = 3 #N번째로 큰 수 arr = [list(map(int,(input().split()))) for k in range(cnt)] #1줄 for문 이용, 테스트 케이스만큼 값을 입력받아 list로 큰 리스트에 저장 for i in range(len(arr)): #N번째로 큰 값 ..