from itertools import combinations N, M = map(int, input().split()) ls = list(combinations(range(1, N+1), M)) for i in ls: for j in i: print(j) https://www.acmicpc.net/problem/15650
study/Algorithm
# 라이브러리를 이용해 순열을 구함 from itertools import permutations N, M = map(int, input().split()) ls = list(permutations(range(1, N + 1), M)) for i in ls: for j in i: print(j, end=' ') # dfs(깊이 우선 탐색) N, M = map(int, input().split()) s = [] # 수열이 담길 리스트 visited = [False] * (N+1) # 중복제거를 위한 체크용 리스트 def dfs(): if len(s) == M: print(' '.join((map(str, s)))) return for i in range(1, N+1): if visited[i]: conti..
# 이진탐색 사용해서 풀기 N = int(input()) # 숫자 카드 개수 cards = sorted(list(map(int, input().split()))) # 숫자 카드 리스트 M = int(input()) # 찾아야할 숫자 개수 nums = list(map(int, input().split())) # 찾아야할 숫자 리스트 num_dict = {} for n in cards: # 갖고 있는 카드들을 딕셔너리에 추가. 리스트에 있는 개수만큼 value를 더한다. if n in num_dict: num_dict[n] += 1 else: num_dict[n] = 1 # 이진탐색 함수 def binary(target, cards, start, end): if start > end: # 시작값이 끝값보다 ..
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..
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