PYTHON 44

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

[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 함수의 출력값이 여러 개 일 때 각 값의 사이사이에 삽입할 문자를 지정할 수 있다.

반응형