걸림돌 봉지의 최소 개수를 구해야하기 때문에 최소 봉지 수를 구하는 기능 구현이 어려웠다 while n >= 0: if n%5 == 0: count += n // 5 print(count) break n -= 3 count += 1 5로 나눈 나머지가 0일 경우, count에 n을 5로 나눈 값을 더하고 count 값을 print한다. 이는 예를 들어 n에 18을 입력받은 경우, 18은 5로 나누어 떨어지지 않기 때문에 if문을 무시하고 `n -= 3` 코드로 넘어가게 되고, 18에 3을 빼면 15가 되기 때문에 15는 5로 나누어 떨어지게 된다. 그렇다면 이번에는 if문에 들어가서 15를 5로 나눈 나머지 값을 count에 더한 후 print된다. 즉 15-3 과정에서 count에 +1이 되었고, 15..
걸림돌 어려운 알고리즘 문제는 아닌 것 같다 코드 import sys N = int(sys.stdin.readline()) a = [] # append를 쓰기 위해서 배열을 먼저 선언 해야함 for _ in range(N): a.append(int(sys.stdin.readline())) # a에 append를 써서 int형으로 바로 넣으면 시간이 단축됨 a.sort() # 배열 a를 정렬, 중복제거를 해줌 for i in a: # i에 배열a의 인덱스 0번 부터 대입하며 반복하는 for문 print(i) 위 코드는 제출한 코드 러닝타임이 길면 시간초과로 되어버리기 때문에 `import sys`를 해서 `sys.stdin.readline()`을 쓰는 것은 필수이다. 또한 N번 입력 받을 때 `a.appe..
걸림돌 문자열을 대조해서 조건에 맞는 문자들을 한 문자로 치환하는 기능을 구현하는데 고민했다 → 처음에는 if문을 여러개 써서 조건 문자열이 입력받은 문자열 안에 있으면 치환하게끔 하려고 했으나 오류가 나서 patterns라는 리스트에 조건 문자열들을 모두 저장해두고 for문 for pattern in patterns: 을 이용하여 입력받은 문자열에 조건 문자열이 있으면 그 문자열은 모두 ‘a’ 로 치환하게끔 함. (어차피 글자수만 세기 때문에) 코드 input_string = input() if input_string in 'c=': input_string = input_string.replace('c=','c') if input_string in 'c-': input_string = input_str..
걸림돌 필요한 세트의 수를 찾는데 6과 9를 뒤집어서 사용할 수 있기 때문에 이를 고려하는 알고리즘을 짜는 것에 고민을 많이 함 → 인터넷을 찾아보니 card[0] * 10을 사용하여 각 숫자의 등장 횟수를 저장하는 인덱스를 미리 만들어두고 각 인덱스 번호 별로 각 숫자의 등장 횟수를 저장하여 사용함, 또 6과 9는 뒤집어서 함께 사용할 수 있기 때문에 6과 9의 등장 횟수가 같을 땐 card[6]에, 다를 땐 card[9]에 +1을 해줌 코드 N = list(map(int,input())) S = [] if len(N) != len(set(N)): if N.count(6) >= 2 or N.count(9) >= 2: result_69 = ((N.count(6) + N.count(9))/2) + ((N...
걸림돌 조건들 (길이가 짧은 순, 중복 단어 1개 뺴고 삭제, 길이가 같으면 사전 순)을 어떻게 구현하는 과정에서 걸림 -> 처음에는 배열로 문자들을 받아서 길이순으로 정렬만 했다가 틀림 → 집합을 사용하면 중복도 피할 수 있고 sorted()를 사용해서 정렬도 사용할 수 있겠다 싶었음 집합에서 조건들 때문에 사전순 정렬, 길이순 정렬 둘다 써야하는데 그것을 구현하는데 문제가 생김 -> sorted_word = sorted(word, key=len)를 사용해서 길이순 정렬을 해보려고 했으나, 이렇게 하면 길이만 정렬되고 길이가 같은 단어들의 사전순 정렬이 되지 않음 -> 그래서 찾아본 결과 sorted_word = sorted(word, key=lambda x: (len(x), x))를 이용하면 길이순 ..
걸림돌 문제에서 제시하는 A,B의 관계를 검출 해내는 코드를 짜는데 어려움을 겪음 A의 약수를 구하는 코드를 만들고 각 약수를 더해서 B가 나오게 만드는 코드를 처음에 만듬 but 정답은 그게 아니었음 아래서 설명 코드를 다 짜고 제출하는데 채점 결과에 시간 초과가 뜸 input()을 sys.stdin.readline()으로 바꿔서 제출 했는데도 또 시간 초과가 떠서 이런 경우는 처음이라 당화하였으나 답 자체가 틀린거였음 코드 import sys N = int(sys.stdin.readline()) # N 번 반복하는 for문 for _ in range (N): num, num2= map(int,sys.stdin.readline().split()) list = [] # 1 부터 num+1 까지 i에 대입..
걸림돌 셀프 넘버를 찾아내는 알고리즘을 짜지 못했음 집합과 리스트에 대해 파악하는데 시간이 좀 걸림 ex) set(), add 등등 집합으로 만들어진 코드를 리스트로 다시 코딩하는데 기능 구현하기가 어려웠음 ex) 논셀프넘버 찾기, 변수 self_nums에 셀프넘버만 넣는 기능 등 코드 # 자연수를 natural_num에 넣고 논셀프넘버를 create_num에 넣음 natural_num = set(range(1,10001)) create_num = set() # create_num에 논셀프넘버들을 넣음 for i in range (1, 10001): for j in (str(i)): i += int(j) create_num.add(i) #self_num에 자연수에서 논셀프넘버를 뺀 숫자들(셀프넘버들)을 ..
걸림돌 : N 개의 줄에 N개의 명령을 입력 받을 때 N개의 명령 문자열을 어떻게 받아서 어떻게 하나하나 비교 해볼 것인가? → 맨 처음에 변수1에 명령어 한 개를 입력받고 후에 N-1번 반복하는 for문을 만들어 입력받게 만들고 한 루프에 변수2에 한 번 입력받고 변수1과 변수2의 문자열들을 비교하여 다른 문자가 들어있는 인덱스에 ?를 넣는다 그리고 그걸 N-1번 반복하는 것으로 해결 마지막 결과 출력 값들 사이에 띄어쓰기가 들어간 후 출력이 됨 → sep을 이용해서 띄어쓰기 없이 붙여서 출력하는 것으로 해결 코드 #명령어 입력받는 횟수 입력받기 N = int(input()) #명령어를 변수1에 입력받기 cmd = list(input()) #앞에서 한 번 입력 받았기 때문에 N-1번 입력받게끔 for문..