파이썬

알고리즘(algo)/백준

[백준] 1235번 - 학생 번호

참고: https://www.acmicpc.net/problem/1235 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 예제를 보게 되면, 두 자리로 자르게 되었을 때 45가 2개이므로 최소 맨 뒤에서 세 개의 자리로 잘라야 모두 다른 번호가 된다. 그래서 출력값이 3인 것을 확인할 수 있다. 그래서 생각한 방법은 반복문을 돌면서 한 자리씩 자르고, 해당 값이 모두 같으면 두 자리, 같으면 세 자리 이런식으로 자릿 수를 증가시키는 형태로 코드를 구현해보았다. 그리고 나서 자른 값을 중복 제거한 길이(set)와 기존 입력으로 받은 배열의 길이와 같으면 반복문을 탈출하면 된다. import sys input = sys.stdin.readline n = int(input()) rs = [str(input().rs..

알고리즘(algo)/백준

[백준] 1676번 - 팩토리얼 0의 개수

참고: https://www.acmicpc.net/problem/1676 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 팩토리얼을 math 라이브러리를 활용하여 구한 다음 문자열에 0이 나오면 break하고 개수를 반환할 수 있지만, from math import factorial as f n = int(input()) cnt = 0 for i in str(f(n))[::-1]: if i != '0': break cnt += 1 print(cnt) 수학적으로 계산하게 되면 n을 5로 나눴을 때 떨어지는 몫의 개수를 더한 값이 0의 개수가 될 수 있다. 예를 들면 10!은 3,628,800 수를 가지고 있고, 0이 아닌 수 8이 나오기까지 0의 개수 2개를 가지고 있는 것을 10을 5로 나눈 몫 2개와 같다고..

알고리즘(algo)/백준

[백준] 1743번 - 음식물 피하기

참고: https://www.acmicpc.net/problem/1743 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 예제와 힌트를 보면 쉽게 이해할 수 있는데, 음식물이 떨어진 좌표가 주어지고 해당 좌표가 상하좌우로 붙은 음식물을 피해야한다. 이 중 붙은 음식물의 크기가 가장 큰 것의 크기를 출력하면 된다. 힌트에서 보게 되면 #으로 이루어진 것 중 상하좌우로 붙어 있는 크기 중 가장 큰 4가 제일 큰 값이 된다. import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline n, m, k = map(int, input().split()) data = [[0] * m for _ in range(n)] chk = [[False] * m for _ i..

알고리즘(algo)/백준

[백준] 1543번 - 문서 검색

참고: https://www.acmicpc.net/problem/1543 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 예제를 보면 쉽게 이해가 가는데, ababababa 라는 문자열과 aba 라는 단어가 주어지면 (aba)b(aba)ba 앞에서부터 잘랐을 때 총 2번 단어가 등장하게 된다. (문제에서 볼 수 있듯이 중복되지 않게 등장한다고 한다.) 문제의 의도에 맞게 슬라이싱을 진행하면서 횟수를 세게 되면, s = input() word = input() cnt, l = 0, len(word) while len(s) >= l: temp = s[0:l] if (temp == word): cnt += 1 s = s[l:] else: s = s[1:] print(cnt) 다음과 같이 반복문을 돌면서 첫번째부터 ..

알고리즘(algo)/백준

[백준] 11656번 - 접미사 배열

참고: https://www.acmicpc.net/problem/11656 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 예제는 사전 순으로 정렬하여 출력하는 것으로 보이고, 문제에서 보게 되면 전체 글자에서 맨 앞글자가 순서대로 빠지는 것이 보인다. 파이썬의 문자열 슬라이싱을 이용하여 배열에 순서대로 저장하고, 정렬된 배열을 출력하면 될 것 같다. s = input() rs = sorted([s[i:] for i in range(len(s))]) print(*rs, sep='\n') 문자 하나만 받기 때문에 sys없이 기본 입출력을 사용했고, sorted 함수를 통해 정렬된 리스트 컴프리헨션을 반환하도록 했다. 그리고 rs를 언팩하고 줄바꿈하여 출력해주었다. 화이팅 💪

알고리즘(algo)/백준

[백준] 1026번 - 보물

참고: https://www.acmicpc.net/problem/1026 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 정수 배열의 같은 인덱스끼리 곱하고, 모두 더한 값의 최솟값은 한쪽 배열은 오름차순으로, 다른 배열은 내림차순으로 정렬한뒤 계산하게 되면 최솟값을 만들 수 있다. 예를 들어 첫 번째 예시에서 가장 최솟값인 0과 가장 최댓값인 8을 곱해주면, 0이 되기때문에 더해주는 값에 최솟값을 만들어 줄 수 있다. import sys input = sys.stdin.readline n = int(input()) mins = sorted(list(map(int, input().split()))) maxs = sorted(list(map(int, input().split())), reverse=True) c..

dDong2
'파이썬' 태그의 글 목록