코드 import re word = list(input()) # 입력받은 단어를 각 알파벳에 알맞는 숫자로 치환 word = re.sub("(A|B|C)", "2", "".join(word)) word = re.sub("(D|E|F)", "3", word) word = re.sub("(G|H|I)", "4", word) word = re.sub("(J|K|L)", "5", word) word = re.sub("(M|N|O)", "6", word) word = re.sub("(P|Q|R|S)", "7", word) word = re.sub("(T|U|V)", "8", word) word = re.sub("(W|X|Y|Z)", "9", word) # 치환된 숫자들을 새로운 변수에 넣고, 숫자들의 합과 한 칸..
걸림돌 0을 입력받았을 때 리스트의 가장 최근 요소를 빼고 0이 아닌 숫자를 입력받았을 때는 리스트에 입력받은 숫자를 넣는 기능을 구현하는데 어려움을 겪음 if문을 사용하여 0인지 아닌지 구분을 하게 하였고, `pop()`과 `append()` 리스트 관련 함수를 사용하여 해결했다 코드 k = int(input()) money_list = [] # 돈을 입력받는 리스트 선언 for _ in range (k): money = int(input()) if money == 0: # 위에서 입력받은 money가 0인지 아닌지 if문으로 구분 money_list.pop() # 만약 0을 입력받는다면 pop()을 통해 스택 가장 위에 있는 요소를 빼줌 else: money_list.append(money) # 0이..
걸림돌 모든 사람들이 돈을 뽑아야한다는 전제 하에 마지막 사람 까지 돈을 뽑는 시간을 최소로 하는 알고리즘을 짜는데 어려움을 겪음 문제를 보면 간단하게 해결가능함. 문제를 잘 읽지 않아서 생긴 문제였음. 방법은 즉 시간이 적게 걸리는 순으로 줄을 세우면 됨 코드 n = int(input()) time = list(map(int, input().split())) time.sort() # 최단시간을 구하기 위해 시간이 작은 순으로 정렬함 total_time = 0 for i in range(1, n+1): total_time += sum(time[0:i]) # sum(time[0:i])는 0번째 부터 i번째 까지 더한다는 뜻임. print(total_time) 각 사람들의 시간을 `time`변수에 리스트 형..
걸림돌 봉지의 최소 개수를 구해야하기 때문에 최소 봉지 수를 구하는 기능 구현이 어려웠다 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..
걸림돌 쉬운 알고리즘 문제였던 것 같다 코드 total, people = map(int,input().split()) mount = total//people; remain_mount = total-(mount*people) print(mount) print(remain_mount) `remain_mount = total - (mount*people)` 'remain_mount'에 'people'에게 나눠주고 남은 금액이 들어가야하기 때문에 총 금액인 'total'에서 인당 나눠주는 금액과 사람 수를 곱한 값을 빼면 되기 때문에 total - (mount*people) 의 값을 remain_total에 넣어준다.
걸림돌 어려운 알고리즘 문제는 아닌 것 같다 코드 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...