목록백준/단계별로 풀어보기 (8)
냥코센세이
오늘도 열심히 삽질했다 너무너무 길게 짜서 실패실패실패실패 alpha = input() lst = ['c=','c-','dz=','d-','lj','nj','s=','z='] cnt = 0 for i in range(len(alpha)): for j in range(len(lst)): #중복 처리 안됨 if lst[j] in alpha: loc = alpha.index(lst[j]) len1 = len(lst[j]) #alpha.replace(lst[j],'*') alpha = alpha[:loc]+('*'*len1) + alpha[loc+len1:] cnt += 1 alpha = alpha.replace('*','') cnt += len(alpha) print(cnt) 원래 짠 코드는 이건데 ㅋㅋㅋㅋ ..
오늘은 학교에서 2주 동안 푸는 알고리즘 챌린지에서 가져와봤다. 9일 차 초보 단계인데 이렇게 주어졌다. 처음에 딱 접했을 때, 언뜻 봤을 때 간단해 보였는데 이게 또 막상 풀어보려 하니까 머리가 잘 안 돌아갔다. 그래서 생각해 낸 방법은 일단 위와 같은 표로 보기엔 너무 헷갈려서 대각선 한 줄마다 한 라인이라고 생각하고 각 라인의 첫 번째와 마지막 숫자의 위치를 알아냈다. 우선 전체적인 코드를 보면 이렇게 된다. x = int(input()) count = 0 max_count = 0 dic = {} while x > max_count: # 입력된 값이 라인 끝 수보다 클 때까지 count += 1 max_count += count # 1+2+3+4+5+6+7,,, 해당 라인마다 더해준다. init_c..
그래두 아직은 알고리즘 단계로 안 들어가서 그런지 1시간이면 풀린다... 시간 좀 줄일 순 없나 열심히 해야지,,,, 이번에는 단계별로 풀어보기 문자열의 단어 공부를 풀어보았다. 알파벳으로 된 단어가 주어졌을 때, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하는 것이다. 단, 가장 많이 사용된 알파벳이 여러 개 존재할 경우 ?로 출력한다. 여기서 내가 제일 먼저 한 것은 우선 단어 입력받기 -> 소문자로 변환하기다. word = input() word = word.lower() 그리고 빈 딕셔너리와 카운트 변수를 생성해주었다. dic = {} count = 0 진짜 구글링만 엄청나게 하는 것 같아 현타가 오긴 한데,,,휴,,, 처음엔 딕셔너리를 사용해야 하는 줄 몰랐다. 따지..
이번 문제는 초반에 헛짓거리 하느라 시간이 좀 걸렸다.ㅜㅠㅠ 문제는 대각선의 길이가 주어지고 높이와 너비의 비율이 주어졌을 때 높이와 너비의 실제 길이를 구하는 문제이다. 초반에 지레 겁을 먹은 바람에 쉽게 갈수 있었던 문제를 꼬아서 풀었다. (리스트로 입력받고 또 하나씩 변수에 분배해주고 numpy를 이용해 실수부분을 구하고 또 for문으로 실수 다 돌리면서 답을 찾으려고 했더니 젠장 답이 나올리가 있나....^^) 결국 답을 적어보면 이러하다. 사실 이것도 혼자서 구해낸 답은 아니라고 봐야한다. 이리저리 구글링을 한 끝에 나온답이다.... 언제쯤 혼자힘으로 문제를 풀어볼지 크흠,, #1297번 TV크기 구하기 D,H,W = map(int,input().split()) #대각선 길이, 높이, 너비 R ..
처음에 알파벳 찾기라 했을 때 솔직히 금방 풀릴 줄 알았는데 뭔가 하나하나씩 조건을 맞춰야하는게 좀 까다로웠다. 전체 코드 완성하기 까지는 대략 30분 정도 걸린 듯 하다. 계속해서 한 문자나 글자씩 쪼개서 비교해야 하는 문제들이 나온다. 코드를 분석해 보면 s = input() s = list(map(str,str(s))) #한 문자씩 쪼개기 lst = [-1]*26 #디폴트 값 -1 26개 생성 우선 input을 통해 원하는 단어를 입력받는다. 그리고 list와 map함수를 통해 한 문자씩 쪼개서 리스트 형태로 저장한다. lst 에 디폴트 값인 -1을 총 알파벳 개수만큼 저장해준다. (총 26개) for i in range(len(s)): a = ord(s[i]) #ord : 입력된 문자의 아스키코드..
이 문제는 N개의 숫자가 공백 없이 주어졌을 때 이 수들을 다 합하는 거다. 첫 줄은 숫자의 개수가 들어가야 한다길래 count로 입력을 받았다. 그리고 저번부터 계속 사용하던 map을 통해 한 자리마다 쪼개서 리스트로 만들어주었다. 이때, 리스트를 적어주지 않으면 제대로 된 숫자가 표시되지 않는다. count = int(input()) num = int(input()) num_div = list(map(int,str(num))) #각 자리수마다 쪼개기 result = sum(num_div) #쪼갠 수들을 더하기 print(result) 한 가지 의문점은 위와 같이 제출했을 때는 정답이 나왔는데 이렇게 중간에 if문을 넣어 길이를 서로 비교해 준 다음 제출해 보니 오답이 나왔다. 비교를 안 하면 굳이 첫..
이번에는 함수 2번째 문제인 셀프 넘버를 풀어봤다. 여기서는 생성자를 출력하는 게 아니라 셀프 넘버를 출력해야 하는데 처음 감을 못 잡다가 저번에 풀어본 백준 2231번 분해합 문제에서 아이디어를 착안해보았다. 분해합에서는 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성했었는데 내 수준으로는 이 문제도 조금 시간이 걸렸다. 분해합을 먼저 풀어보고 이 셀프 넘버 문제를 보니 비슷해 보였다. 내가 푼 문제는 이러하다. lst = [] #생성자 result = [x for x in range(1,10001)] #셀프넘버 for i in range(1,10001): n = list(m..
이번 문제는 정수 n개가 주어졌을 때 n개의 합을 구하는 함수를 만드는 문제다. 파이썬을 사용했는데 이런 함수를 사용하라고 주어졌다. Python 2, Python 3, PyPy, PyPy3: def solve(a: list) -> int a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000) 리턴값: a에 포함되어 있는 정수 n개의 합 (정수) def solve(a: list) -> int: return sum(a) 처음에는 print문까지 넣었다고 오답이 나왔고 그냥 이렇게만 제출했더니 정답이 나왔다... 솔직히 저 괄호 안의 문자가 뭔지는 모르겠다. 그냥 주어지는 대로 했더니 나왔는데 뭔가 허무하다..