본문 바로가기

파이썬106

25945번 - 컨테이너 재배치 [백준 - Python] https://www.acmicpc.net/problem/25945 25945번: 컨테이너 재배치 항구의 컨테이너 하치장 바닥에는 컨테이너를 쌓을 수 있는 칸이 일렬로 총 $n$개가 그려져 있고, 현재 하치장에는 총 $m$개의 컨테이너가 쌓여 있다. 개별 컨테이너의 높이는 모두 $1$로 동일하며 www.acmicpc.net 컨테이너 평균갯수에 중점을 두었다. 하지만 소수점이 생기기 때문에 소수점을 버림했을 경우로 생각하였다. 컨테이너가 모자라서 반드시 추가해야하는 경우는 (평균)미만일 경우이다. 컨테이너가 너무 많아서 반드시 다른곳으로 옮겨야하 하는 경우는 (평균+1) 초과일 경우이다. 모자라거나 많은 경우를 구하여 각각 변수에 저장한다. 이 값들중 더 큰값을 추출하면 답이 된다. 모자라는 경우 문제에서.. 2023. 10. 15.
25943: 양팔저울 [백준 - Python] https://www.acmicpc.net/problem/25943 25943번: 양팔저울 입력은 표준입력을 사용한다. 첫 번째 줄에 자갈 개수를 나타내는 양의 정수 $n$ ($2 ≤ n ≤ 10\,000$)이 주어진다. 다음 줄에 $n$ 개의 수들이 주어지는데, 이들은 번호 순서대로 자갈의 무게이다. 자 www.acmicpc.net left, right 변수 2개를 만들어서 각각 첫번째 자갈과 두번째 자갈 무게를 값으로 초기화 해준다. 나머지 자갈들을 규칙에 맞게 왼쪽 오른쪽에 놔둔다. 그다음 left와 right의 무게를 비교하여 같다면 0을 출력하고, 다르다면 차이값을 구한다. 차이값에서 무한루프로 가장 큰 무게추 100g 부터 1개씩 카운트해준다. n = int(input()) stones = l.. 2023. 10. 3.
26111: Parentheses Tree [백준 - Python] https://www.acmicpc.net/problem/26111 26111번: Parentheses Tree A rooted ordered tree $T$ can be expressed as a string of matched parentheses $p(T)$. The string representation $p(T)$ can be defined recursively. As a base case, a tree consisting of a single node is expressed by a pair of parentheses (). When a rooted or www.acmicpc.net 소괄호 리스트가 입력으로 주어졌을 때, "()"형태의 괄호가 어느정도 깊이에 있는지를 알아내여 그 값들의 합을 .. 2023. 10. 3.
11070 : 피타고라스 기댓값 [백준 - Python] https://www.acmicpc.net/problem/11070 11070번: 피타고라스 기댓값 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫 줄에는 두 양의 www.acmicpc.net 득점과 실점을 저장할 배열을 만들고 계산하는 것 까지는 쉽다. 반례로 그냥 계산을 할 때,득점 실점이 모두 0일 경우 division Zero 가 뜰 수 있기 때문에 그 경우 if문으로 예외처리해야 한다. T = int(input()) for _ in range(T): teamNum, gameNum = map(int,input().split()) teamsScore = [0 for i in .. 2023. 9. 28.
1676번: 팩토리얼 0의 개수 [백준 - Python] https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 팩토리얼 결과 뒤에 0이 나오는 경우는 가장 간단하게 생각했을 때, 5가 몇개들어가있는지 알 수 있으면 된다. 2*5 = 10 인데, 2는 5보다 더 자주 출현하므로 2는 충분하다. 따라서 5의 개수가 몇개인지만 알면된다. 이 문제에서는 주어지는 수의 범위가 0~500이다. 5^4 = 625이므로 5^3까지만 고려하면되고, 0!일 경우도 따로 생각해주면 된다. 0!=1 이므로 따로 케이스를 만들어 0을 출력하면된다. 5^3일때 한번에 3번 카운트를 해도 되지만, 일부러 한번만 카운트.. 2023. 9. 18.
1920번: 수 찾기 [백준 - Python] https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 검사하고 싶은 숫자가 찾고자 하는 문자열에 있는지 없는지를 검사하는 문제이다. 문자열을 인덱스 0번부터 끝까지 뒤지면서 찾아볼 수 있지만 그렇게 되면 시간이 너무 오래걸리게 된다. 따라서 미리 정렬한 뒤, 이분탐색을 통해 원하는 수가 있는지 찾아보게 되면 시간단축을 할 수 있게된다. 이분탐색을 구현을 위하여 끝과 끝, 중간값 3개의 값이 필요하다. .. 2023. 9. 15.
27866번: 문자와 문자열 [백준 Python] https://www.acmicpc.net/problem/27866 27866번: 문자와 문자열 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어 $S$가 주어진다. 단어의 길이는 최대 $1\,000$이다. 둘째 줄에 정수 $i$가 주어진다. ($1 \le i \le \left|S\right|$) www.acmicpc.net s = input() i = int(input()) print(s[i - 1]) 입력받은 문자열에서 인덱스를 이용하여 원하는 위치에 있는 문자 하나만 꺼내어 출력할 수 있다. * 인덱스는 0부터 시작함에 주의하여 s[i-1] 처럼 1을 빼줘야한다. 2023. 9. 15.
[python]은?행 털!자 1 - 26267 두번째 줄부터 입력받을 때 배열에 값들을 배열로 묶어 2중배열로 담아주었다. 이 때 시간 T - 좌표 X 를 한 값을 추가적으로 담아주었다. 시우는 좌표가 증가는 방향으로만 이동해야하기 때문에 멈출 수 없다. T-X를 해준 값이 똑같은 은행만 방문할 수 있다. T-X가 같은 값을 가진 은행들을 각각 합하여 가치가 높은 것을 출력해주었다. import sys n = int(input()) arr = [] for i in range(n): arr.append(list(map(int,sys.stdin.readline().split()))) arr[i].append(arr[i][1]-arr[i][0]) timeset = {} for i in range(n): if arr[i][3] in timeset.keys(.. 2022. 12. 19.
[python] 멘토와 멘티 - 26265 번 처음에 람다식으로 sort 내부에서 해결하려고 하였다. 멘티의 첫글자를 아스키코드로 변환하고 - 를 붙여서 크기비교를 해보았으나 멘티 이름은 한글자가 아니라 문자열이기 때문에 이 방법으로는 최적의 정답을 낼 수 없었다. 먼저 멘토 기준으로 정렬하고, 멘토를 key로 딕셔너리를 만들어 value 값으로 멘티 이름을 배열로 넣어주고 내림차순 정렬해주었다. 그리고 순서대로 출력해주면 된다. import sys n = int(input()) arr = [] for i in range(n): arr.append(((sys.stdin.readline().split()))) # arr = sorted(arr,key = lambda x:(x[0],-ord(x[1][0]))) arr.sort() arr2 = {} for.. 2022. 12. 18.
[python]로봇 청소기 - 14503번 빡구현 문제이다. 청소를 할 수 있을 때와 못할 때 2경우로 크게 나눴다. 청소 가능한 경우 방향을 바꾸고 앞으로 움직여줘야 하는 것에 염두를 둬야한다. 청소를 하지 못할 경우는 작게 3가지로 나누었다. 1. 4방향을 모두 돌았는데 뒤가 벽일경우 break 2. 4방향 모두 돌았는데 뒤로 갈 수 있는 경우 3. 왼쪽을 바라봤을 때 청소를 할 수 없는 경우 청소를 하지 못할 경우의 2번째 경우는 방향전환을 할 필요없이 뒤로 가기만 하면되지만, 나머지 1, 3번째 경우는 방향을 돌려줘야 한다. import sys n,m = map(int, input().split()) r,c,d = map(int,input().split()) field = [] direction_to_left =[[0,-1],[-1,0],.. 2022. 12. 17.
[python]팬그램 - 10384번 a부터 z까지의 딕셔너리를 만들어놓고 0으로 초기화해둔다. 입력값으로 루프를 만든다 만약 영어 문자가 있다면 소문자로 바꾸고 check 딕셔너리에 해당 자리에 +=1을 해준다. 루프가 끝나면 check를 루프 돌리면서 최소 값이 어떤지 찾는다. 생각해보니 size = min(check.values()) 을 쓰면 루프를 돌리지 않아도 된다. n=int(input()) for testCase in range(n): inn = input() check = {'a':0,'b':0,'c':0,'d':0,'e':0,'f':0,'g':0,'h':0,'i':0,'j':0,'k':0,'l':0,'m':0,'n':0,'o':0,'p':0,'q':0,'r':0,'s':0,'t':0,'u':0,'v':0,'w':0,'x':0.. 2022. 12. 16.
[python] 어항 정리 - 23291번 빡구현 문제이다 시간복잡도를 생각하지 않아도 되는 여유로운 문제여서 특별한 자료구조를 따로 사용하지는 않고 배열로만 풀었다. 어항 뒤집기 할때가 구현하기 빡세고, 물고기 수 비교해서 옮겨담을 때는 아래와 오른쪽만 비교해줘서 계산해주면 된다. (위랑 왼쪽을 같이 고려해주면 중복때문에 복잡해짐) 깊은복사를 위해 copy모듈을 가져와 사용했다. 파이썬의 슬라이싱 [ : ] 을 이용하면 단순한 1중배열에 경우에 한하여 깊은복사처럼 사용할 수 있지만, 2중배열부터 내부 배열의 주소를 얕은 복사해버리기 때문에 deepcopy를 사용하는 것을 추천한다. import copy n,k = map(int,input().split()) fishbowl = list(map(int,input().split())) def jug.. 2022. 12. 14.