목록백준 (176)
홍우진의 개발 일기장
문제 링크 https://www.acmicpc.net/problem/10811풀이 코드n,m = map(int,input().split())bagu = [x for x in range(1,n+1)]for k in range(m): i,j = map(int,input().split()) bagu[i-1:j] = reversed(bagu[i-1:j])print(*bagu)코드 해석reversed 라는 함수를 사용하였다.이 함수를 사용하면 수를 뒤집을 때 for 문을 사용하지 않아도 편하게 뒤집을 수 있다.
문제 링크 https://www.acmicpc.net/problem/10813 풀이 코드n,m = map(int,input().split())d = dict()for i in range(1,n+1): #딕셔너리 생성 d[i] = inum = 0for i in range(m): a,b = map(int,input().split()) #수를 받은 후 num에 임시 저장하고 바꿈 num = d[a] d[a] = d[b] d[b] = num print(*list(d.values())) #딕셔너리를 리스트로 변경 후 값만 출력코드 해석딕셔너리를 사용하여 직관적으로 해결하였다.딕셔너리는 Key 와 Value가 함께 움직이기 때문에이런 유형의 문제를 풀 때 간단하게 풀기 쉽다.
문제 링크 https://www.acmicpc.net/problem/2108 풀이 코드import sysinput = sys.stdin.readlinen = int(input())a = [int(input()) for x in range(n)] #리스트 컴프리헨션#산술평균print(round(sum(a)/len(a))) #중앙값a.sort() print(a[len(a)//2]) #최빈값dic = dict() #딕셔너리 생성for i in a: if i in dic: #딕셔너리에 Key, Value 추가 및 증가 dic[i] += 1 else: dic[i] = 1maxval = []for i in dic: if max(dic.val..
문제 링크https://www.acmicpc.net/problem/1966 풀이 코드x = int(input())for _ in range(x): n, m = map(int, input().split()) data = list(map(int, input().split())) a = 1 while(1): if data[0] 0: #순서가 0 이상이면 m -= 1 #순서 - 1 else: m = len(data) - 1 #0이라면 순서를 제일 뒤로 print(a)코드 해석if문 두개를 따로 돌려 큐 자리 옮기기와 실시간 순서 카운팅을 같이 진행하였다.
문제 링크https://www.acmicpc.net/problem/1929 풀이 코드n,m = map(int,input().split())for i in range(n,m+1): #n~m 사이의 수를 모두 검사 if i == 1: #1이라면 그냥 넘어감 continue for j in range(2,int(i**0.5)+1): #2부터 i의 제곱근까지의 수로 나눠지는지 if i % j == 0: #나눠진다면 소수가 아님 break else: print(i) #안나눠진다면 소수코드 해석"에라토스테네스의 체" 가 핵심 포인트다.즉 구하려는 수 x가 2부터 x의 제곱근까지의 수로 나눠지는지만 확인하면 소수인지 아닌지 판별이 가..
문제 링크https://www.acmicpc.net/problem/18110 풀이 코드import sysinput = sys.stdin.readlinedef round(x): if x - int(x) >= 0.5: #소수점이 0.5 이상일 때 반올림해서 리턴 return int(x) + 1 else: return int(x) #이하라면 그냥 리턴n = int(input())num = round(n*0.15) #절사평균 계산 시 제외할 값의 수level = [int(input()) for _ in range(n) ] #리스트 컴프리헨션 후 정렬level.sort()if n: #n이 참이라면 if num: #num이 참이라면 print(roun..
문제 링크https://www.acmicpc.net/problem/28702 풀이 코드for i in range(3,0,-1): # 3, 2, 1 순서로 숫자가 들어간다. a = input() if a not in ['FizzBuzz','Fizz','Buzz']: # 입력값중에 Fizz, Buzz, FizzBuzz 가 없으면 (입력값이 숫자면) dap = int(a)+i # 답 = 그 수 + 앞으로 남은 수 breakif dap % 15 == 0: # 3과 5의 배수 print('FizzBuzz')elif dap % 3 == 0: # 3의 배수 print('Fizz')elif dap % 5 == 0: # 5의 배수 print('Buzz')e..
문제 링크https://www.acmicpc.net/problem/15829/ 풀이 코드L = int(input())mun = input()sum = 0for i in range(L): #for문으로 L만큼 반복 sum += (ord(mun[i]) - 96) * (31**i) #ord를 사용하여 알파벳을 아스키코드로 변환하고 - 96을 하여 a가 1이 되게 한다.print(sum % 1234567891)코드 해석생각보다 간단하다.ord는 아스키코드를 이용하여 알파벳을 숫자로 변환시켜준다.a 가 97 부터 시작이기때문에 -96을 하여 알파벳의 시작점을 1로 만들어준다.그 후에 나와있는 공식을 그대로 코드에 적용시켜주면 된다.