N, M = map(int, input().split()) num_list = sorted(list(map(int, input().split()))) s = [] visited = [False] * N def dfs(): if len(s) == M: print(' '.join((map(str, s)))) return remember_me = 0 for i in range(N): if not visited[i] and remember_me != num_list[i]: visited[i] = True s.append(num_list[i]) remember_me = num_list[i] dfs() s.pop() visited[i] = False dfs() https://www.acmicpc.net/proble..
study/Algorithm
N = int(input()) ls = set() emoji = 0 for _ in range(N): log = input() if log == 'ENTER': emoji += len(ls) ls.clear() else: ls.add(log) emoji += len(ls) print(emoji) https://www.acmicpc.net/problem/25192 25192번: 인사성 밝은 곰곰이 첫번째 새로운 사람이 들어온 뒤 pjshwa, chansol, chogahui05은 모두 곰곰티콘으로 인사했다. 두번째 새로운 사람이 들어온 뒤 pjshwa와 chansol은 다시 곰곰티콘으로 인사했다. www.acmicpc.net
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
# 라이브러리를 이용해 순열을 구함 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번: 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 ..