망나니 AWOS의 일상
article thumbnail
[python] 백준 1269번 대칭 차집합
알고리즘/백준 2022. 2. 4. 23:32

문제 풀이 집합 같은 경우 set() 함수를 이용하면 쉽게 풀 수 있다. set() 함수는 중복을 허용하지 않으므로 수식으로 나타내 보면 아래의 수식처럼 나타낼 수 있다. A U B - (A ∩ B) 합집합 같은경우 union 함수, 교집합 같은 경우 intersection 함수를 사용하면 된다. 완성된 코드!!👍😊 n, m = map(int, input().split()) A = set(map(int, input().split())) B = set(map(int, input().split())) print(len(A.union(B) - A.intersection(B)))

article thumbnail
[python] 백준 1764번 듣보잡
알고리즘/백준 2022. 2. 1. 14:12

문제 풀이 간단하게 생각하면 듣도 못한 사람들과 보도 못한 사람들의 교집합을 구하면 되는 문제이다. 합쳐서 듣보잡의 수와 해당하는 사람들을 출력하면 되는 것이다. 예제 입력1에서 듣도 보도 못한 사람들의 교집합에는 ohhennrie baesangwook 두 사람이 있기 때문에 출력의 결과가 이렇다. 여기서 생각한 방법은 set함수를 이용하는 것이었다. list도 있겠지만 입력에서 보면 N, M은 500,000 이하의 자연수 즉 입력을 N, M 합쳐 백만 번 정도를 돌린다는 소리인데... 분명 시간초과가 날것이기 때문에 list보다는 set을 이용하게 되었다. 집합을 만들어주고 해당 교집합을 구하여 출력할 때 사전 순으로 출력하라고 했기 때문에 정렬 함수인 sorted를 이용해주면 된다. 완성된 코드!!👌..

article thumbnail
[python] 백준 1439번 뒤집기
알고리즘/백준 2022. 1. 31. 21:53

문제 풀이 문자열 S를 입력받아서 모든 문자를 1로 만들 때 최소한의 뒤집기 횟수를 출력해야 한다. 예제 입력 4를 보면 11001100110011000001 인데 연속된 0만 보자면 00, 00, 00, 00000 총 4개가 있고 연속된 1만 보자면 11, 11, 11, 11, 1 총 5개가 있는 것을 볼 수 있다. 여기서 생각한 방법은 split함수를 쓰는 것이었다. 문자열 S를 입력받고 해당 문자열을 0이나 1을 구분자로 두면 쉽게 풀 수 있을 것 같았다. s1 = s.split('0') s2 = s.split('1') 위와 같이 각각 0과 1로 구분하였을 때 결과이다. 배열에 빈 문자열이 있지만 값이 있을 때만 카운트하면 된다. s1은 연속된 0의 개수의 배열이 될 것이고 s2는 연속된 1의 개수..

article thumbnail
[python] 백준 11656번 접미사 배열
알고리즘/백준 2022. 1. 28. 23:42

문제 풀이 문제에서 나와있다시피 baekjoon의 접미사는 총 8개로 되어있다. 해당 문자열의 길이 = 접미사 개수라고 볼 수 있다. 해당 접미사들을 for문을 돌려 리스트에 넣어주면 모든 접미사들을 구할 수 있다. 사전 순이기 때문에 sort함수를 써서 정렬해주면 된다. 완성된 코드!!👌👌 def func(word): l = list() for i in range(len(word)): l.append(word[i:]) l.sort() return l s = input() for val in func(s): print(val)

article thumbnail
[python] 백준 2870번 수학숙제
알고리즘/백준 2022. 1. 27. 23:56

입력 첫 번째 줄 테스트 케이스 수 두 번째 줄부터 문자열 출력 문자열에 대해서 숫자만 뽑아서 비 내림차순으로 출력(비 내림차순에 대해서는 문제 내용에 쓰여있다) 문제풀이 테스트 케이스 수를 입력받고 다음 줄부터는 문자열에서 문자를 제외하고 숫자만 뽑아서 비 내림차순으로 정렬하여 출력해야 하는데 구분한다고 하면 split함수가 생각날 것이다. 하지만 일반적인 split함수로는 문자 하나에 대해서만 구분할 수 있는데 re라이브러리 안에 있는 split함수를 쓰면 구분할 문자가 여러 개여도 구분할 수 있다. re — 정규식 연산 — Python 3.10.2 문서 scanf() 시뮬레이션 파이썬에는 현재 scanf()에 해당하는 것이 없습니다. 정규식은 일반적으로 scanf() 포맷 문자열보다 강력하지만, 더..

article thumbnail
[python] 백준 5217번 쌍의 합
알고리즘/백준 2022. 1. 14. 10:14

입력 첫 번째 줄에는 테스트 케이스 수 두 번째 줄 ~ 네 번째 줄까지 n 출력 n에 대한 순서 쌍 문제 풀이 간단하게 그림을 그리면 사칙 연산으로 순서 쌍을 나눌 수 있다. 순서 쌍을 이루는 수들은 서로 달라야 하기 때문에 4일 때 2 2는 순서 쌍이 되지 않는다. 해당 부분만 주의하면 쉽게 코드를 짤 수 있다. 완성된 코드!!👍 for _ in range(int(input())): x = int(input()) n = x//2 l = [] for i in range(1, n+1): if i < x - i: l.append(f'{i} {x - i}') print(f'Pairs for {x}: ' + ', '.join(val for val in l))

article thumbnail
[python] 백준 15233번 Final Score
알고리즘/백준 2022. 1. 2. 18:13

입력 첫 번째 줄에는 A팀 인원수, B팀 인원수, 득점한 선수 인원수 두 번째 줄에는 A팀 선수들의 이름 세 번째 줄에는 B팀 선수들의 이름 네 번째 줄에는 득점한 선수들의 이름 출력 득점한 인원이 더 많은 선수팀 출력, A팀과 B팀의 득점한 인원이 같을 때 "TIE" 출력 문제 풀이 간단하게 득점한 선수가 A팀, B팀에 얼마나 있는지 확인하여 결과값을 출력해주면 된다. 또 중복된 코드가 있어서 함수를 하나 만들어 불필요한 코드를 없앴다. 완성된 코드!!👍 def p_count(p_l): cnt = 0 for val in p_l: cnt += g_p.count(val) return cnt a,b,p = map(int, input().split()) a_p = input().split() b_p = inp..

article thumbnail
[python] 백준 13229번 Selection Sum
알고리즘/백준 2022. 1. 1. 17:26

입력 첫 번째 줄에는 배열 크기 두번째 줄에는 배열 안의 값들 세 번째 줄에는 테스트 케이스 개수 네 번째 줄부터는 배열 위치(시작, 끝)에 해당하는 값들의 누적 합 출력 배열 1번째 요소에서 1번째 요소까지의 합 = 5 배열 0번째 요소에서 9번째 요소까지의 합 = 42 배열 5번째 요소에서 7번째 요소까지의 합 = 12 배열 9번째 요소에서 9번째 요소까지의 합 = 1 배열 1번째 요소에서 8번째 요소까지의 합 = 40 문제 풀이 내장 함수 sum을 이용하면 쉽게 풀 수 있다. 완성된 코드 n = int(input()) n_l = list(map(int, input().split())) for _ in range(int(input())): a, b = map(int, input().split()) p..

article thumbnail
[python] 백준 1037번 약수
알고리즘/백준 2021. 12. 6. 22:17

문제 풀이 보자마자 그림을 한번 그려봤다. 검은색 : 테스트 케이스의 입, 출력 빨간색 : 테스트 케이스 출력에서의 1과 자기 자신 파란색 : 찾아낸 규칙 처음에 짜 본 코드다. sorted 내장 함수로 입력받은 수들을 정렬하였다. 또한 N의 약수의 개수가 홀수일 때, 짝수일 때를 판별하여 N을 구하도록 했다. ex) 홀수일 경우, N의 약수의 개수 = 1, input = 5, out = 25 25의 약수는 1을 제외한 5 뿐이기 때문에 제곱하여 반환시켜주면 25가 나온다. ex) 짝수일 경우, 입력받은 약수들이 list형태로 있기 때문에 최솟값 * 최댓값을 하면 N이 나오게 된다. N = int(input()) l = sorted(map(int, input().split())) if N % 2 == 1..

article thumbnail
[python] 백준 1003번 피보나치 함수
알고리즘/백준 2021. 12. 5. 23:25

문제 풀이 이해가 잘 안 될 때 직접 그림을 그려보는 것도 좋은 방법이다. 1열 : N, 2열 : 0이 등장하는 횟수, 3열 : 1이 등장하는 횟수라고 보면 될 것 같다. 이렇게 쓰고보니 2열과 3열에서 규칙이 보여 아래와 같이 작성해봤다. 1의 개수처럼 0도 피보나치로 가능하였기 때문에 아래의 코드처럼 돌렸지만 시간 초과가 나왔다. import sys def fibonacci0(n): if n == 0: return 1 elif n == 1: return 0 else: return fibonacci0(n-1)+fibonacci0(n-2) def fibonacci1(n): if n == 0: return 0 elif n == 1: return 1 else: return fibonacci1(n-1)+fib..

article thumbnail
[python] 백준 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰
알고리즘/백준 2021. 11. 26. 22:00

문제 풀이 문제에 있는 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수를 리스트에 저장해두고 입력을 다른 리스트에 받아 두 리스트의 차이값을 출력하면 되는 문제이다. 완성된 코드!!👍😊 chess = [1, 1, 2, 2, 2, 8] count = list(map(int, input().split())) for i in range(len(chess)): chess[i] -= count[i] print(' '.join(map(str, chess)))

article thumbnail
[python] 백준 2161번 카드1
알고리즘/백준 2021. 11. 25. 21:18

문제 풀이 문제에서 N=4인 경우에 버린 카드는 1 3 2가 되고 남는 카드는 4가 되어 출력 결과가 1 3 2 4가 되길래 짝수 홀수로 나누면 될 줄 알았다. 하지만 테스트 케이스 1번에서 출력 결과가 1 3 5 7 4 2 6이 되는 것에 대해서 도무지 이해가 안 되어 결국 그림을 그려 이해를 하고 어떻게 하면 풀 수 있을지를 알아냈다. 그림에서와 같이 cnt 값에 따라서의 2가지의 작업을 돌리면 되었다. 1. cnt가 홀수면 첫 번째 원소 값을 원래 리스트에서 pop 하고 다른 리스트에 append 2. cnt가 짝수면 첫 번째 원소 값을 원래 리스트에 append 하고 원래 리스트에서 첫 번째 위치에 있는 원소 값을 pop 대부분의 사람들은 데크(dequeue)로 푸셨던데 아직 본인은 쓸 줄 몰라 ..

article thumbnail
[python] 백준 10845번 큐
알고리즘/백준 2021. 11. 24. 21:36

문제 풀이 명령어 6가지 중 push 명령어는 해당 명령어만 실행하고 출력은 없다. 테스트 케이스 입력 부분을 보면 파라미터를 2개, 1개 받는 경우가 있기 때문에 함수를 써서 하나의 인자는 받고 다른 인자는 default로 두어 해당 명령어가 들어오면 명령어 역할에 맞게 실행시켜주면 될 것 같았다. def 함수명(a, b=0): return queue는 리스트 구조를 이용하였고, 명령어를 받기 위해 빠른 입출력의 sys.stdin.readline()을 이용하였다. 그냥 입출력을 쓰면 시간 초과가 나게 된다. 또한 입력 명령어 중에 push 같은 경우 공백을 포함한 두번째 인자 값을 받아서 정수형(int)으로 만들어 줘야 하므로 split함수로 입력받았다. cmd = sys.stdin.readline()..

article thumbnail
[python] 백준 1598번 꼬리를 무는 숫자 나열
알고리즘/백준 2021. 11. 23. 22:44

문제 풀이 두 수의 제한 조건은 10,000,000 이하. 입력을 1과 10000000을 입력받았을 때, 반복문으로 배열을 생성하게 되면... 시간 초과가 날게 분명해서 반복문은 아닐 거라 판단했다. 규칙이 보일거라 생각한다. 입력받은 값에서 1을 빼면 몫과 나머지의 값들이 행열의 값들과 일치하고 입력받은 각각의 행열들의 사칙연산을 하고 절대값을 씌워주면 직선거리 값이 나온다는 것을 알 수 있다. 완성된 코드!👍😊 a, b = map(int, input().split()) a -= 1 b -= 1 print(abs(a // 4 - b // 4) + abs(a % 4 - b % 4))

article thumbnail
[python] 백준 1076번 저항
알고리즘/백준 2021. 11. 3. 19:16

문제 요약 및 풀이 예제 1을 참고해보자. 값과 곱의 규칙은 10의 제곱수의 규칙과 같다고 볼 수 있다. 첫 번째 입력값 Yellow = 4 두번째 입력값 violet = 7 세번째 입력값 red = 100으로 출력은 4700이 된다. 마지막에 들어온 입력값은 곱으로 계산해주면 되고 나머지 입력값들은 뒤에 붙여주면 된다. 코드를 보자. 색상 값, 곱의 표를 dictionary로 표현하였고 입력이 3개라는 것을 이용하여 for문의 range가 0, 1, 2 총 3개의 범위이기 때문에 마지막 index인 2가 올 때 10의 제곱수를 곱해주도록 하였다. ex) input -> yellow, violet, red 색 yellow violet red 배열 인덱스 0 1 2 값 4 7 100 최종 출력 4700 이..

article thumbnail
[python] 백준 14652번 나는 행복합니다~
알고리즘/백준 2021. 10. 27. 23:31

문제 풀이 처음에 배열을 이용하는 문제인 줄 알아 배열로 풀다가 시간 초과가 나게 되어서 입력 출력에 규칙이 보여 해결하였다. K가 들어오면 M인(열 개수) 만큼 나누어 몫과 나머지를 출력해주면 된다. 6 / 4 = 1, 2 14 / 4 = 3, 2 N, M, s = map(int, input().split()) print(s // M, s % M)