알고리즘 41

[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 구문을 이용하면 에러가 발생돼도 프로..

[Python/파이썬] 알고리즘 지엽 정리(계속 수정 및 추가)

1. input().split()을 쓰면 string 타입의 element들을 갖는 List를 얻는다. 2. while문에서 while문 밖에 변수랑 안에 변수가 중복되는 것 같을 때 while의 조건을 바꾸고 break를 이용하는 것도 방법이 될 수 있다. 3. 하나의 변수에 여러 element가 있는 list를 받으려고 할 때는 그냥 map만 쓰면 안된다. (ex. numList = map(int, input().split())) 밖에 list()로 감싸줘야한다. ( list(map(int, input().split())) ) 또는 파이썬의 컴프리헨션(comprehension)을 이용해 할 수도 있다. [int(i) for i in input().split()] 을 써서 해도된다. (속도는 compr..

[Python/파이썬] 백준 알고리즘 15552번 - 빠른 A+B

위에서 언급된 참고 글 링크 : https://www.acmicpc.net/board/view/22716 글 읽기 - 추가 설명 및 다른 언어 빠른 입출력 방법 댓글을 작성하려면 로그인해야 합니다. www.acmicpc.net import sys T = int(input()) for _ in range(T): A, B = map(int, sys.stdin.readline().split()) print(A + B) 파이썬의 경우 sys을 import해 sys.stdin.readline()을 사용하면 더 빠르게 입력을 받을 수 있다고 한다. 1. sys.stdin.readline()을 이용해서 input() 을 대체할 수 있고 더 빠르다.

[Python/파이썬] 백준 알고리즘 2588번 - 곱셈

A = int(input()) B = input() AxB0 = A * int(B[0]) AxB1 = A * int(B[1]) AxB2 = A * int(B[2]) AxB = A * int(B) print(AxB2, AxB1, AxB0, AxB, sep='\n') A는 int로 형변환을 하고 B는 문자로 받는다. (인덱싱을 하기위해서) 1. 공백없이 붙어있는 입력값에서 일정 부분을 떼서 사용하고 싶을 땐 문자로 바꾸어 인덱싱 2. print 할 때 sep 파라미터를 사용하면 print 함수의 출력값이 여러 개 일 때 각 값의 사이사이에 삽입할 문자를 지정할 수 있다.

[알고리즘] 더 효율적인 Quick Sort에 대한 생각

오늘 학기의 마지막 자료구조론 수업으로 Sort 알고리즘들에 대해 배웠다. 그 중 Quick Sort를 더 효율적인 Time Complexity로 사용할 수 있을 것 같아 생각을 글로 남긴다. 먼저 Selection Sort, Insertion Sort, Bubble Sort와 같은 경우 O(n^2)의 Time Complexity를 갖는다. 그리고 Merge Sort, Quick Sort의 경우 O(nlogn)의 Time Complexity를 갖는다. 근데 Quick Sort는 조금 다른점이 있는데 다른 Sort 알고리즘의 경우 worst case의 Time Complexity이지만 Quick Sort는 평균적인 경우의 Time Complexity였다. Quick Sort는 pivot을 결정하는 부분에서..

반응형