본문 바로가기

파이썬17

[백준/1015] 수열 정렬 수열 정렬 Baekjoon Online Judge Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다. www.acmicpc.net 알고리즘 입력된 배열 A의 오름차순을 새로운 배열에 저장하는 문제다. 처음에 문제 이해 자체가 좀 어려웠는데, 예시를 통해서 비교적 쉽게 이해할 수 있었다. 일단 배열 A는 수열 P처럼 0부터 N-1까지의 수를 한 번씩 포함하는게 아니라 예시의 2 1 3 1 처럼 같은 숫자가 2번 이상 반복될 수 있기 때문에 가장 작은 값부터 큰 값까지 하나씩 차례대로 순서를 찾았다. 복잡도를 따졌을 때 이러한 방식으로 문제를 해결하더라도 N 2023. 9. 30.
[백준/11004] K번째 수 | Python 정렬 함수의 알고리즘 K번째 수 Baekjoon Online Judge Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다. www.acmicpc.net 알고리즘 N(1 2023. 8. 2.
[백준/1009] 분산 처리 | 반복되는 숫자 어떻게 효율적으로 처리할까  분산 처리 알고리즘 승수의 마지막 자리 반복 0 0 1 1 2 2 4 8 6 3 3 9 7 1 4 4 6 5 5 6 6 7 7 9 3 1 8 8 4 2 6 9 9 1 수의 끝자리만 가져오는 두 가지 방법 문자열 활용 a = str(a) a = int(a[-1]) 나머지 활용(%10, %100, %1000, ....) a %= 10 # 끝 한 자리만 a %= 100 # 끝에서부터 2개 전체 코드 import sys; input=sys.stdin.readline t=int(input()) for _ in range(t): a,b = map(int,input().split()) a = str(a) a = int(a[-1]) if a == 1 or a == 5 or a == 6: print(a) # 4 번씩.. 2023. 7. 3.
[Python] 파이썬 딕셔너리 개요 '코드트리'에서 파이썬 딕셔너리를 공부한 내용이다 코드트리 자료가 생각보다 이해하기 정말 쉽게 되어있고, 중요한 부분을 잘 집어줘서 기록하고 두고두고 볼 예정 파이썬 딕셔너리(Python Dictionary) 파이썬 딕셔너리는 검색/삽입/삭제에 유용한 HashMap 자료구조이다. * HashMap: (key, value) 쌍으로 이루어져 있고, 순서와 상관없이 빠른 검색/삽입/삭제(시간복잡도 O(1))가 가능한 자료구조 딕셔너리 선언 파이썬 딕셔너리는 다음과 같이 선언한다. d1 = dict() d2 = {} d3 = { 'apple' : 1, 'banana' : 2, 'grape' : 3 } key와 value 딕셔너리의 기본적인 구조는 dic_name[key] = value 이다. key 값을 .. 2023. 2. 13.
[백준/15821] 낚이고 낚아라 | 배열 2칸씩 묶기 _ range()의 활용 알고리즘.. 나의 생각 🐤 이 문제 내용 자체가 흥미로워서 비행기에서도 계속 아이패드로 풀이를 생각해봤다. 내가 생각한 첫 번째 알고리즘은 원 둘레를 이용하는 것이었다. 하지만 계산을 해보니, 엉터리 풀이라서 깔끔하게 안녕.. 그 다음엔 원 넓이를 이용한 알고리즘을 생각했다. 1, 2, 3, 4분면에 입력 받은 점 중 최댓값을 골라서 그만큼의 길이를 반지름으로 만들어주면 되겠다!가 결론이었다. 그럼 내 메모에서 빨간 점들과 원점 사이의 거리가 가장 큰 값이 낚시 거리가 되겠다. 알고리즘 생각은 잘 했는데 구현을 스스로 하지 못했다. 그 이유는 1. 연속적으로 입력되는 값들의 좌표 표현 x y 좌표가 연속적으로 들어오는데 이걸 좌표로 어떻게 표현을 해야할 지 몰랐다. 홀수 번째에 있는 건 y 좌표, 짝수 .. 2023. 2. 5.
[백준/10819] 차이를 최대로 | 모든 순서를 고려한 배열.. permutation | 리스트 갱신법이 항상 효율적일까? 알고리즘 1. 모든 배열 케이스를 확인해주기 위해서 permutarion으로 배열 케이스를 모두 생성해준다. 2. 생성된 배열 케이스의 |A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|를 확인해준다. 최종코드 from itertools import permutations n = int(input()) li = list(map(int,input().split())) per = permutations(li) ans = 0 for i in per: case = 0 for j in range(1, len(i)): case += abs(i[j-1] - i[j]) if case > ans: ans = case print(ans) 알게된 점 1. 모든 순서를 고려한 .. 2023. 1. 31.
[백준/15656] N과 M(7) (1,3) (3,1)같은 경우도 모두 출력(중복 순열)을 해주어야 하기 때문에 파이썬 itertools의 product를 사용했다. 1번 코드 from itertools import product as p n,m = map(int,input().split()) num = list(map(int,input().split())) num.sort() num = map(str, num) ans = map(' '.join, p(num, repeat=m)) print('\n'.join(ans)) 2번 코드 from itertools import product as p n,m = map(int,input().split()) num = sorted(list(map(int,input().split()))) for i i.. 2023. 1. 29.
[백준/11383] 뚊 | 2차원 이미지 | 행렬 한줄씩 걷어내기(?) 📝 알고리즘 처음에 문자열로만 생각해서 못 풀었는데 문제를 정확하게 읽어야 한다. N x M 크기의 '이미지'와 N x 2M 크기의 '이미지'가 주어지는 거라서 행렬로 생각하는 게 더 수월하다. 처음에 헷갈렸던 점은 일단 큰 for문 안에서 비교를 해야 하는데 입력이 NxM크기의 이미지가 먼저 들어온 다는 거다. 그러면 for _ in range(n): img1 = input() img2 = input() 이런식으로도 받을 수 없기 때문에..(리스트인 경우도 마찬가지) n,m = map(int,input().split()) img1 = [input() for _ in range(n)] img2 = [input() for _ in range(n)] 이렇게 한 줄 for문으로 입력을 받아주었다. 또한, im.. 2023. 1. 28.
[백준/2309] 일곱 난쟁이 | sorted()를 반복문의 대상으로 📝 알고리즘 들어오는 순서에 상관없이 숫자 7개의 합을 100으로 맞춰야 하기 때문에 파이썬 itertools의 combinations를 사용했다. 알고리즘은 잘 생각했는데 출력물이 깔끔하지 않아서 아쉬웠다. 당장 생각나는 게 이 코드여서 제출을 하고, 다른 사람의 코드를 보니 sorted를 for문의 반복횟수로 지정해주었다. 파이썬 for문은 어떤 시퀀스(sequence)를 반복하는 문법이므로 sorted가 반복횟수가 될 수 있는 것이다. 💻 최종 코드 from itertools import combinations as comb t = [] h = 0 for _ in range(9): t.append(int(input())) for i in comb(t,7): if sum(i) == 100: i = l.. 2023. 1. 25.
[백준/10809] 알파벳 찾기 | find() 찾고자 하는 문자의 인덱스를 반환 📝 알고리즘 파이썬 내장함수 find와 아스키코드를 활용하여 문제를 풀 수 있다. find 함수는 해당 문자열에서 괄호 안의 문자가 몇 번째에 나타나는지 인덱스를 반환한다. 만약, 해당 문자가 없다면 -1을 반환한다. 소문자 a부터 z까지의 아스키 코드 넘버는 97부터 122까지다. (대문자 A to Z는 65 ~ 90이다.) 💻 전체 코드 s = input() alpha = list(range(97,123)) # a ~ z for i in alpha: print(s.find(chr(i))) 소문자 알파벳 전체를 아스키 코드로 (97번부터 122번까지) 리스트에 저장한다. 저장된 소문자 알파벳 아스키 코드를 for문으로 돌면서 포함되었는지, 아닌지 확인해주면 된다! 2023. 1. 22.
[백준/4949] 균형잡힌 세상 ( 파이썬 ) 📝 알고리즘 전형적인 스택 문제다. 우선 괄호의 여는 부분이 왼쪽으로 와야 하기 때문에, 문자열을 돌면서 ( 나 [ 일 때 스택에 넣어준다. 만약 스택에 값이 들어있는데 )나 ]가 들어오면 ( or [ 와 짝이 맞아야 하므로, 스택의 탑(stack[-1])을 통해 쌍이 맞는지 확인하고, 쌍이 맞다면 스택에서 여는 괄호를 팝해서 스택을 비워준다. 쌍이 아니라면 스택에 닫힌 괄호를 넣어준다. 이 알고리즘을 입력 받은 문자열을 모두 검사할 때까지 반복한다. 💻 최종 코드 while True: s = input() if s == '.': break stack = [] for i in range(len(s)): if s[i] == '(' or s[i] == '[': stack.append(s[i]) elif s[.. 2023. 1. 21.
[백준/1181] 단어 정렬 (파이썬) 아주 기본적인 것들을 충실하게 물어본 문제다. 이런 컴팩트한 문제..! 너무 좋음 정렬을 하는데 조건이 2개 이상이면 이중 for 문이나 if 문을 사용해도 되지만, lambda 함수를 사용하여 깔끔하게 정리할 수 있다. 이 문제를 풀기 위해 알아야 하는 파이썬 기초 개념 lambda(익명함수) set 자료형은 중복을 제거할 수 있으나, 순서가 없기 때문에 list(set(arr)) 형식으로 종종 사용된다. (정렬이 필요할 때) set 자료형은 순서가 없기 때문에 정렬이 불가능하기 때문이다. python sort와 sorted 차이 [Python] 파이썬 정렬 심화, lambda(익명함수) 함수 -파이썬 정렬 정렬 메소드인 sort()와 함수 sorted()는 디폴트 값이 오름차순이고, 내림차순으로 정렬.. 2023. 1. 18.