본문 바로가기
반응형

Algorithm60

[파이썬 알고리즘 문제풀이] : 점수계산 문제 문제 수가 주어지고, 문제를 맞추면 처음엔 1 그 다음은 2 그 다음은 3..이렇게 1씩 증가하며 점수가 누적된다. 중간에 문제가 틀리면 다시 1점이 쌓이게 된다. 주의 풀이 n = int(input()) a = list(map(int, input().split())) # 점수를 합해야 한다. sum = 0 # 가중치 cnt = 0 # 리스트 a에서 첫 번째 인덱스 값부터 끝까지 하나씩 뺴준다. for x in a: # x가 1이랑 같다면 == 점수가 1점일 때 if x == 1: # 연속으로 정답을 맞추면 1씩 증가된 값을 더해야 하기 때문에 cnt에 가중치를 준다. cnt += 1 # 가중치 값을 sum(합계)에 담아준다. sum += cnt # x가 1이 아닐 때 == 정답이 아닐 때 else.. 2021. 12. 28.
[파이썬 알고리즘 문제풀이] : 주사위 게임 문제 1~6까지 있는 주사위 3개를 던져서 규칙에 맞게 상금을 받고, 가장 큰 수를 출력하는 프로그램을 작성하시오. // 저작권 관련 때문에 문제를 간략하게 설명해야 하기 때문에 완전한 문제를 적을 수 없습니다. 주의 풀이 import sys n = int(input()) res = 0 for i in range(n): tmp = input().split() # tmp를 오름차순 정렬해 준다. tmp.sort() # tmp가 지금 문자열로 받아졌기 떄문에 int 형으로 변환해서 받아준다. a, b, c = map(int, tmp) if a == b and b == c: # a, b, c 모두 같은 값이라 아무 값이랑 1000이랑 곱해준다. money = 10000 + (a * 1000) elif a ==.. 2021. 12. 23.
[파이썬 알고리즘 문제풀이] : 뒤집은 소수 문제 숫자를 뒤집고 뒤집은 숫자가 소수이면 출력하시오. 주의 풀이 import sys def reverse(x): # 초기화 하나 한다. res=0 # while 문으로 x가 0보다 클 때 항상 반복문을 돌려준다. while x>0: # x의 1의 자리 숫자가 t가 된다. t=x%10 res=res*10+t # x는 10으로 나눈 몫으로 바꿔진다. x=x//10 # res를 리턴한다. return res def isPrime(x): # x의 값이 1일 수 있다. if x==1: # False 시켜줘야 한다. return False # 소수를 구하려면 값의 반 정도까지만 구하면 된다. # 그 뒤쪽은 어차피 다 걸러진다. # 2로 나눈 몫의 +1을 해줘 절반까지 돌게 한다. for i in range(2, .. 2021. 12. 22.
[파이썬 알고리즘 문제풀이] : 소수 구하기 (에라토스테네스의 체) 문제 소수의 개수를 출력하는 프로그램을 작성하시오. 주의 풀이 import sys n=int(input()) ch=[0]*(n+1) cnt=0 for i in range(2, n+1): if ch[i]==0: cnt+=1 for j in range(i, n+1, i): ch[j]=1 print(cnt) 2021. 12. 21.
[파이썬 알고리즘 문제풀이] : 자릿수의 합 문제 N개 자연수를 입력 받고 각 자릿수를 더해서 제일 큰 값의 자연수를 출력하시오 주의 풀이 import sys n = int(input()) a = list(map(int, input().split())) def digit_sum(x): sum=0 # str() 함수는 받은 값을 다 쪼개서 문자열로 받는다. 123을 넣으면 1 2 3을 따로 따로 값을 문자열로 가져오는 것이다. for i in str(x): sum+=int(i) return sum max = -2147000000 # for x in a: 형식으로 작성하면 a리스트에 일일이 접근해 값을 가져온다. 리스트에 1 12 123이 있다면 그대로 1 12 123 따로따로 값을 가져오는 것이다. for x in a: tot=digit_sum(x).. 2021. 12. 20.
[파이썬 알고리즘 문제풀이] : 정다면체 문제 두 값을 더해서 나오는 합 중 가장 많이 나오는 합의 숫자를 출력하시오. 주의 풀이 # 정다면체 import sys n, m = map(int, input().split()) # n과 m의 합의 값을 담아둘 리스트를 만들고 크기를 n과 m을 더하고 좀 여유있게 3만큼 추가한 크기를 주었습니다. cnt = [0]*(n+m+3) # 정수 자료형 최소값을 넣어줍니다. max=-2147000000 for i in range(1, n+1): for j in range(1, m+1): # cnt에 n과m의 합을 인덱스 넘버로 설정하고 값은 합이 같을 때 1씩 증가시켜 줍니다. cnt[i+j] += 1 # 최대 값을 찾기 위해 max에 누적시켜줍니다. for i in range(n+m+1): if cnt[i]>.. 2021. 12. 16.
[백준] : 10871 Python, 파이썬 풀이 문제 주의 풀이 n, x= map(int, input().split()) a = list(map(int, input().split())) for i in range(n): if a[i] < x: print(a[i], end=" ") # 원래는 세로로 출력이 되는데 end=" "로 세로가 아닌 중간 공백을 넣어 가로로 출력이 되도록 합니다. n, x는 단일 값으로 받고 a는 리스트로 수열을 담습니다. for문으로 n만큼 반복시켜주고 a리스트에 i를 담아 x랑 비교합니다. 비교된 문장은 세로로 출력이 되는데 end=" "로 세로가 아닌 중간 공백을 넣어 가로로 출력이 되도록 합니다. 2021. 12. 16.
[백준] : 2438 Python, 파이썬 풀이 문제 주의 풀이 n = int(input()) for i in range(1, (n+1)): print("*" * i) for문에 1부터 시작해서 n+1까지 반복을 시킬 수도 있고 n = int(input()) for i in range(n): print((i+1) * "*") n까지만 반복하고 출력문에서 +1을 해줄 수도 있습니다. for문을 두 개 사용해서 만들 수도 있지만 이렇게 하는게 좀 더 간편합니다. 2021. 12. 16.
[백준] : 2742 Python, 파이썬 풀이 문제 주의 range() 함수의 사용법을 검색해 보고 풀어보면 좋습니다. 풀이 n = int(input()) for i in range(n, 0, -1): print(i) 우선 정답은 위 코드입니다. range함수를 통해 n = 초기값, 0 = 종료값, -1 = 증감값 이렇게 넣을 수 있습니다. 처음에는 조금 다르게 풀었는데 출력은 같은데 정답으로 인정이 안 되어서 다시 풀어봤습니다. n = int(input()) for i in range(5): n -= 1 print(n+1) 이게 처음에 풀어본 코드인데 사실 정답 코드가 깔끔하긴 합니다. 이번 코드를 풀면서 하나 더 배웠네요. 2021. 12. 13.
[백준] : 2741 Python,파이썬 풀이 문제 주의 받은 값은 0부터 출력이 되므로 출력문에 +1을 해 줘야 합니다. 풀이 # 백준 2741번 파이썬 풀이 n = int(input()) for i in range(n): print(i+1) 5를 입력했을 때, 1,2,3,4,5가 수직으로 나오도록 하려면 for문을 통해 반복문을 작성하고 print문으로 출력을 하는게 기본인데 입력 값을 5로 입력하고 i를 출력하면 0부터 총 n번 실행하기 때문에 0,1,2,3,4가 나옵니다. 때문에 출력문에 +1을 해줘야 합니다. 2021. 12. 11.
[파이썬 알고리즘 문제풀이] : K번째 수 문제 n개 숫자로 이루어진 숫자열이 주어지면 s번째부터 e번째까지의 순을 오름 차순으로 정렬했을 때 k번째로 나타나는 숫자를 출력하시오. 주의 출력문에 있는 #%d는 출력 예제에 #이 있기 때문에 #자체를 출력하기 위해 넣은 것 입니다. 풀이 T = int(input()) for i in range(T): n, s, e, k = map(int, input().split()) #값을 입력 받아서 split기준으로 나누고 int로 바꿔준다. #int형으로 바뀐 입력 받은 값들은 a라는 list안에 담기게 된다. a=list(map(int, input().split())) #s~e까지 받는데 0번째 인덱스부터 순서대로 배정받기 위해 [s-1:e]를 해줍니다. #마지막 e는 자신을 포함하지 않으므로 추가 연산자.. 2021. 12. 10.
[파이썬 알고리즘 문제풀이] : 대표값 문제 n명의 학생 수학 점수가 주어지고, 학생들의 평균을 구하고 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하시오. 단, 평균과 가장 가까운 점수가 여러개 일 경우 점수가 높은 학생의 번호를 출력하고, 높은 점수를 가진 학생이 여러명일 경우 학생 번호가 가장 빠른 번호를 출력하시오. 주의 평균을 구하기 위해 합계를 구하는 함수 | sum() 소수 점 첫째 자리까지 구하는 함수 | round() 절대 값을 구하는 함수 | abs() 리스트의 인덱스 값과 실제 값을 쌍으로 대입해 주는 함수 | enumberate() ++추가사항 round() 함수가 소수 점 첫째 자리까지 구하는 함수라고 적었는데 파이썬에서는 round_half_up 방식이 아닌 round_half_even 방식을 택하고 있기 때문에 .. 2021. 12. 10.
[백준] : 8393 Python,파이썬 풀이 문제 주의 값을 누적시키기 위해 미리 변수 하나를 0으로 초기화 해 줘야 합니다. 풀이 #n까지의 합을 구하기 위해 n을 입력 받습니다. n = int(input()) #누적 값을 담기 위해 j를 0으로 초기화 합니다. j = 0 #종료 값은 n을 포함하지 않기 때문에 +1을 해줍니다. for i in range(n+1): #j에 누적해 주고 출력해 줍니다. j = j + i print(j) n까지의 합을 구하기 위해 n을 입력 받습니다. 누적 값을 담기 위해 미리 초기화 시켜줍니다. i를 n까지 반복인데 마지막 종료에서 n은 포함시키지 않으므로 +1을 해 줍니다. 누적시키고 출력하면 됩니다. 2021. 12. 9.
[백준] : 10950번 Python,파이썬 풀이 문제 주의 테스트 케이스를 먼저 입력받고 그 수 만큼 반복해야 합니다. 풀이 t = int(input()) for i in range(t): a, b = map(int, input().split()) print(a+b) 먼버 반복할 테스트 케이스를 입력 받고 입력 받은 테스트 케이스 만큼 반복해 주면서 a,b값을 입력 받고 print문으로 더해서 출력해 줍니다. 2021. 12. 9.
[파이썬 알고리즘 문제풀이] : k번째 큰 수 문제 1부터 100사이 자연수가 적힌 n카드 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록한다. 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하시오. 1 1 1 2 2 3 4 5 중 2번째 큰 수는 2 입니다. ( 중복은 제거 ) 주의 set()은 중복을 제거할 때 사용합니다. set()은 sort가 없기 때문에 정렬을 하려면 list에 담아 정렬을 해야 합니다. set() 값을 list에 담아 sort로 정렬을 해주면 오름차순이 디폴트 값이고 reverse=Ture를 통해 내림차순 정렬을 할 수 있습니다. 풀이 n, k=map(int, input().split()) a=list(map(int, input().split())) #set은 중복 제거에 사용합니다. res=set() #첫 .. 2021. 12. 8.
[파이썬 알고리즘 문제풀이] : 최소 값 구하기 문제 arr =[5, 3, 7, 9, 2, 5, 2, 6]의 최소 값을 구하시오 주의 그냥 최소 값을 구하면 < 부호를 사용하면 되지만 가장 최신의 최소 값을 구해야 한다면 2021. 12. 8.
[백준] : 2739번 Python,파이썬 풀이 문제 주의 습관적으로 곱하기를 x로 해서 틀렸는데 *로 표시해야 합니다. 풀이 n = int(input()) for i in range(1, 10): print(n, "*", i, "=", n*i) n을 입력 받습니다. for문을 사용해 변수 i를 1~9까지 반복하고 print문을 통해 출력을 해 줍니다. 2021. 12. 7.
[파이썬 알고리즘 문제풀이] : K번째 약수 문제 N과 K라는 자연수가 주어졌을 때 N의 약수 중 K번째로 작은 수를 출력하시오. K번째 약수가 존재하지 않다면 -1을 출력하시오. 풀이 n, k=map(int, input().split()) cnt=0 for i in range(1, n+1): if n%i==0: cnt+=1 if cnt==k: print(i) break else: print(-1) 두 개의 숫자를 읽기 위해 map 함수에서 split을 통해 띄어쓰기를 기준으로 구분하여 두 값을 받고 그 값을 int화 시키라는 뜻 입니다. 6과 3을 넣는다면 6이 n에 3이 k에 들어가게 됩니다. 약수이면 cnt를 1 증가시킵니다. 그러다 k번째 약수가 발견되면 멈춥니다. 만약 찾지 못 했다면 -1을 해 줍니다. for , else문이 있는데 브레.. 2021. 12. 5.
[백준] : 2884번 Python, 파이썬 풀이 문제 주의 - 풀이 hour, min = map(int, input().split()) if min >= 45: print(hour, min - 45) elif hour > 0 and min < 45: print(hour - 1, min + 15) else: print(23, min + 15) 2021. 11. 25.
[백준] : 14681번 Python, 파이썬 풀이 문제 주의 a와 b를 따로 int형식의 input 타입으로 받습니다. map함수를 사용하면 런타임 에러가 뜹니다. 풀이 a = int(input()) b = int(input()) if a > 0 and b > 0: print("1") elif a 0: print("2") elif a 0 and b < 0: print("4") 2021. 11. 25.
[백준] : 2588번 Python, 파이썬 풀이 문제 주의 print를 여러번 사용할 수도 있지만 sep='\n'을 통해 print 안에서 공백을 통해 줄 바꿈을 해줄 수 있습니다. 풀이 a = int(input()) b = input() print(a * int(b[2]), a * int(b[1]), a * int(b[0]), a * int(b), sep = '\n') 2021. 11. 24.
반응형