파이썬 33

[Python/파이썬] 백준 알고리즘 7568번 - 덩치

브루트 포스 유형 문제이다. N = int(input()) sizeList = [] for _ in range(N): x, y = map(int, input().split()) sizeList.append((x, y)) for size in sizeList: rank = 1 for compare_size in sizeList: if size[0] < compare_size[0] and size[1] < compare_size[1]: rank += 1 print(rank, end=' ') 처음엔 너무 어렵게 접근했다. 사실은 문제에 답이 있었다. 바로 "N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다." 라는 문장에 답이 있었다. 그냥 간단하게 자기보다 몸무게와 키가..

[Python/파이썬] 백준 알고리즘 1929번 - 소수 구하기

M, N = map(int, input().split()) for i in range(M, N+1): primeNum = True if i == 1: primeNum = False else: for j in range(2, i): if i % j == 0: primeNum = False break if primeNum: print(i) 처음엔 위와 같이 풀었었다. 숫자 i 하나에 대해 2부터 i-1까지 나눠보면서 0으로 나누어 떨어지면 소수가 아니므로 이를 제외하는 방식으로 코드를 짰었다. 그러나 1929 문제에서 이 방식은 시간초과가 떴다. 그래서 구글링을 해보니 '에라토스테네스의 체'를 이용해 시간을 단축해야한다고 한다. 에라토스테네스의 체는 가장 대표적인 소수 판별 알고리즘이다. 에라토스테네스의 체..

[Python/파이썬] 백준 알고리즘 2869번 - 달팽이는 올라가고 싶다

개인적으로 풀면서 재밌었다. 그래서 포스팅하려고 한다. A, B, V = map(int, input().split()) pre_move = (V-A) // (A-B) remainder = (V-A) % (A-B) if remainder > 0: print(pre_move + 2) else: print(pre_move + 1) V길이의 막대의 정상에 도달하는 시점은 분명 낮일 것이다. 근데 여기서 중요시 생각해야 될 것은 막대의 정상에 도달하는 시점은 달팽이가 낮에 움직일 수 있는 최대의 거리만큼을 이동함과 동시에 도달하는 것이 아닐 수 있다는 것이다. 다시 말해서, 정상에 도달하고도 달팽이는 더 움직일 수 있지만 정상에 도달했기 때문에 멈추는 경우가 있을 수 있다는 것이다. 때문에 우선 나는 막대의 길이..

[Python/파이썬] 백준 알고리즘 1316번 - 그룹 단어 체커

N = int(input()) # 카운트를 처음부터 전체 단어의 개수인 N으로 두어 # 그룹 단어가 아닐 경우 하나씩 빼는 방식으로 접근할 것이다. cnt = N for _ in range(N): word = input() for idx in range(len(word)-1): # idx를 기준으로 앞뒤 단어가 다를 경우 if word[idx] != word[idx+1]: # idx 뒤쪽 인덱스의 문자열에서 word[idx+1] 문자가 포함되어 있는 지 확인 if word[idx+1] in word[:idx]: # 포함되어 있다면 연속해서 알파벳이 나타난게 아니므로 cnt를 하나 감소 (그룹 단어가 아니다) cnt -= 1 # 그리고 break로 for문 탈출(다음 단어로 넘어감) break print(..

[Python/파이썬] 백준 알고리즘 2908번 - 상수

주어진 세자리 수인 두 수를 비교해 더 큰 쪽을 출력하라는 문제이다. A, B = map(lambda num: num[::-1], input().split()) print(A) if A > B else print(B) input().split() 하면 주어진 두 세자리 수가 문자열 element이 된 리스트가 반환된다. map함수를 이용해 이 리스트(iterator)의 element들을 lambda num: num[::-1]라는 함수에 넣고 A와 B라는 변수에 각각 집어넣는다. lambda는 이름이 없는 함수로 함수를 한줄로 간단하게 표현할 수 있게 해준다. lambda (인자) : (표현식) B else print(B) 은 A>B인 경우 print(A)를 하고 반대의 경우 print(B)를 한다는 의미..

[Python/파이썬] 백준 알고리즘 1152번 - 단어의 개수

문제 자체는 굉장히 간단하다. 근데 다른 문제들의 평균 정답 비율이 40~60퍼인것에 비해 이 문제의 정답 비율은 29%라 다뤄봐야겠다고 생각해서 포스팅한다. print(len(input().split())) 한줄이다. 다른 분들의 코드를 보니 굉장히 복잡하게 푼 코드들도 많았다. 한 번 복잡하게 생각하면 복잡하게 접근하게 되는 문제인 것 같다..(그 때문에 정답 비율이 낮은 것 같다) 필자도 문제를 풀다가 딥하게 빠져 복잡하게 해결하고 나서 다른 분들의 풀이를 보고 허탈함을 느낄 때가 많았는데 알고리즘은 복잡하게 느껴질 수록 단순하게 생각하려는 연습이 필요한 것 같다. 1. 코드가 너무 복잡해진다 느끼면 단순하게 접근해보려고 노력하자 2. input().split()을 하면 리스트로 반환된다.

[Python/파이썬] 백준 알고리즘 1065번 - 한수

N = int(input()) if N < 100: # 1~99는 다 한수 print(N) else: cnt = 0 for i in range(100, N + 1): i = list(map(int, str(i))) if i[0] - i[1] == i[1] - i[2]: cnt += 1 print(99 + cnt) 입력값 N이 100보다 작다면 1~99는 다 한수이므로 그대로 출력한다. 만약 100보다 크다면 100부터 N까지 for문을 돌며 각 자리수가 등차수열을 이루는 지 확인하고 등차수열을 이룬다면(한수라면) cnt를 하나 증가시킨다. 그리고 그 cnt에 1~99를 포함하는 99를 더해 출력한다. 1. 정수 n의 각 자리수를 쪼개 리스트로 만들고 싶다면 list( map(int, str(n)) )하면..

[Python/파이썬] 백준 알고리즘 4673번 - 셀프 넘버

생성자가 없는 숫자가 '셀프 넘버' 이고 이 셀프 넘버들을 쭉 나열하는 프로그램을 짜보라는 문제이다. # 함수 d(n) def d(n): # 생성자 n을 이용해 d(n)을 만드는 수식 n = n + sum( map(int, str(n)) ) return n # 셀프 넘버가 아닌 수들(생성자가 있는 수들)이 들어갈 집합 nonSelfNum = set() # nonSelfNum 집합에 들어갈 수들을 찾아 넣기 for i in range(1, 10001): nonSelfNum.add( d(i) ) # 셀프 넘버들을 출력하기 for j in range(1, 10001): if j not in nonSelfNum: print(j) 먼저 프로그램의 구조는 다음과 같다. 1. 셀프 넘버가 아닌 수들(생성자가 있는 수..

[Python/파이썬] 백준 알고리즘 1110번 - 더하기 사이클

N = input() if int(N) < 10: N = "0" + N calNum = N[1] + str(int(N[0]) + int(N[1]))[-1] count = 1 while calNum != N: calNum = calNum[1] + str(int(calNum[0]) + int(calNum[1]))[-1] count += 1 print(count) 제일 처음 생각한 방법으로 N을 문자열로 받은 뒤 인덱싱해 푸는 방법이었다. N = int(input()) new_N = N cnt = 0 while True: new_N = (new_N % 10) * 10 + (new_N // 10 + new_N % 10) % 10 cnt += 1 if new_N == N: break print(cnt) 새롭게 배..

[Python/파이썬] 백준 알고리즘 10951번 - A+B - 4

while문으로 계속 입력을 받다가 입력이 없으면 출력을 멈추는 코드를 짜라는 것이다. while True: try: A, B = map(int, input().split()) except: break print(A + B) 변수 A, B에 입력이 없으면 에러가 나게 된다. 때문에 try-except 구문을 써야한다. try 구문에는 에러가 발생할 여지가 있는 문장을 작성하고, except 구문에는 에러가 발생할 경우 실행시킬 문장을 작성한다. 1. try-except 구문은 에러가 발생할 가능성이 있는 코드를 처리할 수 있는 코드이다. (ex. 입력 상황에서 문자를 입력해야하는데 숫자를 입력해 에러가 난다는 등) 에러가 발생할 여지가 있는 경우에 try-except 구문을 이용하면 에러가 발생돼도 프로..

반응형