n = int(input()) print((n-2) * (n-1) * n // 6) print(3) 또 돌아온 알고리즘 수업.... 이번에도 sum이 몇번 반복되는지를 묻는 문제다. MenOfPassion 코드를 살펴보면 코드 1은 3중 for문 내에 있다. 그렇다면 제일 바깥 for문의 반복 횟수 * 중간 for 문의 반복 횟수 * 안쪽 for문의 반복 횟수를 구해주면 된다. i는 1부터 n - 2까지 반복, j는 i + 1부터 n - 1까지, k는 j + 1부터 n까지 반복한다. 즉 i의 실행 횟수는 n - 2, j는 (n - 2) * (n - 1)번, k는 (n - 2) * (n - 1) * n번 실행된다. 그래서 코드 1의 횟수는 (n - 2) * (n - 1) * n회이다. 그리고 중첩된 반복문..
내 코드 n = int(input()) print((n-1) * n // 2) print(2) 이 문제 풀면서 정말 어려웠다... 처음에는 문제가 이해가 되지 않아서 여러번 읽어봤고, 그래도 어떻게 해야할지 몰랐는데 시간복잡도를 찾아보면서 이해할 수 있었다. 문제에서 요구하는 것은 코드 1의 수행 횟수, 즉 이중 for 문 내부의 sum이 몇번이나 실행되는지를 말하는 것이다. 그렇다면 바깥쪽 for문의 반복 횟수 X 안쪽 for문의 반복 횟수를 해주면 답이 나온다. 바깥쪽 for 문의 i는 1부터 n - 1까지 반복된다. 그리고 안쪽 for 문의 j는 i + 1부터 n까지 반복된다. 예제처럼 n이 7이라고 할 경우, 반복되는 내용을 정리해보면 이렇다. i가 1일때 - j는 2 ~ 7까지 반복 (6회) i..
https://1ncomparable.tistory.com/208 230213 - 재귀 1. 재귀(Recursion) 재귀란? 재귀(再歸) : 원래의 자리로 되돌아가거나 되돌아옴. 재귀 함수 : 자기자신을 호출하는 함수. 반복적인 작업을 해야하는 문제를 더 간결하게 풀어낼 수 있다. 1) 재귀로 문 1ncomparable.tistory.com 재귀 함수 정리 재귀 함수는 자기 자신을 호출하는 함수이다. 반복적인 작업을 해야할때 유용하게 사용할 수 있다. sum(n) : 1부터 num까지의 합을 리턴해주는 함수 def sum(n): if n == 1: return n return n + sum(n-1) sum(5) 코드 풀이 sum(5)가 호출 sum(5) 내부에서 5 + sum(4)가 반환. sum(4)..
시간 복잡도 알고리즘이 입력 크기에 따라 실행되는 데 필요한 시간을 나타내는 것이다. 일반적으로 입력 크기가 증가함에 따라 알고리즘의 실행 시간이 어떻게 증가하는지를 나타낸다. 보통 빅오 표기법을 사용하여 나타낸다. 이 표기법은 입력 크기에 대한 알고리즘 실행 시간의 상한을 나타내고, 주로 알고리즘의 실행 시간이 최악의 경우에 얼마나 증가하는지를 나타내는데 사용된다. 시간 복잡도를 고려하여 효율적인 알고리즘을 구현한다면 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화 한 코드를 구성했다는 의미이다. 빅오 표기법(big-O notation) 입력값(n)에 대한 수식에서 최고차항을 기준으로 알고리즘이 수행되는 최악의 시간 복잡도를 표현한다. 최고차항을 기준으로 하는 이유는 연산의 수가 극한에 수렴할때 나..
S = input() newSet = set() # 중복없이 부분 문자열을 담아줄 set 객체 for i in range(len(S)): # 기준이 될 i for j in range(len(S)): # 범위가 될 j j = j + i # i가 1인경우 0부터 시작하지말고 1부터 시작해야함... newSet.add(S[i:j+1]) # 슬라이싱의 end 인덱스 전까지 값이 복사되니까 +1 해줌 print(len(newSet)) https://www.acmicpc.net/problem/11478 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net
N = int(input()) # 파일개수 dic = {} # 확장자를 담아줄 딕셔너리 for i in range(N): _, extend = input().split('.') # .기준으로 문자열 분리 if extend in dic: # 딕셔너리에 확장자가 있다면 개수를 추가 dic[extend] += 1 else: # 없다면 새로 등록 dic[extend] = 1 for key in sorted(dic.keys()): # 딕셔너리의 key를 오름차순 정렬 print(key, dic[key]) https://www.acmicpc.net/problem/20291 20291번: 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 ..
# 통과코드 import sys n = int(sys.stdin.readline()) name_list = {} # 이름을 담아줄 딕셔너리 result = '' # 결과를 한번에 출력해주기 위해 문자열 변수 선언 for i in range(n): name, state = sys.stdin.readline().split() if state == 'enter': # 출근했다면 딕셔너리에 추가 name_list[name] = state else: # 퇴근했다면 딕셔너리에서 삭제 del name_list[name] for i in sorted(name_list.keys(), reverse=True): # 딕셔너리에서 key만 추출, 역순으로 정렬 result += i + '\n' print(result) htt..
N = int(input()) # 과목 개수 score = list(map(int, input().split())) M = max(score) # 최고점 찾기 for i in range(len(score)): score[i] = score[i] / M * 100 # 각 점수별로 다시 계산 print(sum(score) / N) # 평균 계산 https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보 www.acmicpc.net
# 가장 많이 사용된 알파벳이 무엇인지 알아내기 word = input().upper() # 출력해야할 값이 대문자이므로 대문자로 변경 newSet = list(set(word)) # word에 존재하는 문자들의 중복 제거 word_count = [] # 각 글자의 개수를 담아줄 리스트 for i in newSet: word_count.append(word.count(i)) # word에서 각 문자의 개수를 word_count에 추가 if word_count.count(max(word_count)) >= 2: # 만약 최대값의 개수가 2개 이상이라면 = 최대값 여러개 print('?') else: print(newSet[word_count.index(max(word_count))]) # 최대값이 하나인 ..
A, B = map(lambda n: int(n[::-1]),input().split()) print(A if A > B else B) # n[::-1] : 문자열 역순 정렬 https://www.acmicpc.net/problem/2908 2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net