[python] 백준 13699번 점화식
알고리즘/백준2022. 3. 2. 23:15[python] 백준 13699번 점화식

문제 풀이 문제를 가만히 보면 규칙이 있다는 걸 알 수 있다. 그림을 보면 반복문이 쓰인다는 것을 알아챌 수 있다. n의 범위가 0 ≤ n ≤ 35 이므로 미리 t(0)부터 t(35)까지의 값들을 구한다. 다 구하는 이유는 예를 들어 t(0)과 t(1)의 값만 있다고 생각하면 t(3)을 구하기 위해서는 t(2)의 값을 알아야 하는데 t(2)의 값이 구해지지 않았기 때문에 일단 미리 순차적으로 t(0)부터 t(35)까지의 값들을 다 구해놓은 후 입력값이 어떤 숫자(n)가 들어왔는지에 따라 해당 t(n)을 반환해주면 된다. 글이 이해가 안된다면 그림을 보면 좀 더 이해하기 쉬울 것이다. 완성된 코드!!👍😊 n = int(input()) # t(0) = 1 t = [1] # n의 범위가 0부터 35까지이나 t..

[python] 백준 2729번 이진수 덧셈
알고리즘/백준2022. 3. 1. 21:28[python] 백준 2729번 이진수 덧셈

문제 풀이 간단하게 두 문자열을 받아 해당 문자를 정수로 바꿔준다. 바뀐 두 정수의 합을 구해 bin() 함수로 감싸주면 0b~~~~ 로 시작하는 이진수가 출력이 되는데 해당 0b를 잘라주어 출력해주면 된다. 완성된 코드!!😊👍 t = int(input()) for _ in range(t): n1, n2 = input().split() print(bin(int(n1, 2) + int(n2, 2))[2:])

[python] 백준 5568번 카드 놓기
알고리즘/백준2022. 2. 28. 22:46[python] 백준 5568번 카드 놓기

문제 풀이 예제 1을 보면 첫째 줄에 카드의 총 개수(4장), 둘째 줄에 총 카드 중 몇 장(2장)을 뽑을지 셋째 줄부터 마지막째 줄까지 4장의 카드의 숫자를 입력 (1, 1, 2, 12) 받는다. 무작위로 2장씩 짝지어 보면 아래의 그림과 같이 된다. 조합은 총 12개지만 중복되는 수가 있으므로 제외하면 7개라는 결괏값이 나온다. python에서는 itertools 라이브러리에 내장되어 있는 permutations 함수가 있다. 이 permutations 함수는 위의 문제처럼 순열을 구할 때 잘 쓰이는 함수이다. 때문에 꼭 import를 해줘서 사용해야 한다. 05-05 itertools.permutations - 순열 `itertools.permutations(iterable, r=None)` 함수는..

[python] 백준 1120번 문자열
알고리즘/백준2022. 2. 27. 22:41[python] 백준 1120번 문자열

문제 풀이 문제 조건을 보면 A의 길이는 B의 길이보다 작다. A와 B의 길이가 같을 경우 B의 문자열 중에 A의 문자열 중에 어느 문자가 다른지를 판별해주어 개수를 세주면된다. 아래의 그림을 보면 A에 hello, B에 xello가 들어왔을때 for문을 돌려 각각의 요소들이 같은지 다른지를 판별해 개수를 세서 리턴해주면 된다. A와 B의 길이가 다를 경우 방법은 같은 경우의 방법과 유사하다. 아래의 그림을 보면 A에 abc, B에 topabcoder가 들어왔을때 해당 B의 문자열을 abc로 비교할 수 있는 횟수는 총 8번이다. B의 문자열들을 인덱스 값을 하나씩 증가시켜가며 대조하는 것으로 보면 된다. 총 8번을 비교하여 그 중 최소를 출력해주면 된다. 완성된 코드!!👍😊 def same_len(a, ..

[python] 백준 7120번 String
알고리즘/백준2022. 2. 21. 23:42[python] 백준 7120번 String

문제 풀이 글보다는 그림을 보고 설명을 하는 게 나을 것 같다. 입력으로 들어온 문자열 ppppppiaanooooo 가 있을 때 해당 문자열을 리스트에 담아 문자 하나하나를 원소로 갖는다. i번째 문자가 다음 순서인 i+1번째 문자와 같지 않을때만 추가해주면 된다. (0번째 문자와 1번째 문자가 같지 않으면 된다.) 하지만 예시 그대로 코드를 짜면 위의 그림과 같이 pian이라고 출력이 된다. 그래서 해당 문자열 첫번째 문자(p)를 먼저 빼두고 i번째 문자와 i+1번째의 문자가 같지 않을 때의 조건에서 i+1번째의 문자를 이어 붙여주면 piano라는 글자가 나오게 된다. 완성된 코드!!😊👍 s = list(input()) rs = s[0] for i in range(len(s)-1): if s[i] !=..

[python] 백준 16499번 동일한 단어 그룹화하기
알고리즘/백준2022. 2. 20. 00:08[python] 백준 16499번 동일한 단어 그룹화하기

문제 풀이 내가 생각한 방법은 이렇다. 단어들을 리스트로 받아 리스트의 원소(문자)들을 정렬하고 정렬된 문자들을 이어 붙여 하나의 단어로 만든 후에 그 문자들이 새로운 리스트에 담는데 만약에 새로운 리스트에 해당 문자가 없을때만 담으면 그룹을 출력할 수 있을 것 같았다. 글이 이해가 안되면 그림을 하나 보자. 예제 입력 1이다. 주어진 단어들이 총 4개인데 리스트로 만들어 정렬한 후 리스트의 원소들을 이어 붙여 하나의 새로운 단어로 만든 것이다. 만들어진 단어들을 새로운 리스트에 순차대로 넣어 만약에 해당 단어가 새로운 리스트에 없을 때에만 추가해주면 된다. 그렇게 하면 해당 그룹은 2개( act와 dgo )로 나뉘어진다. 완성된 코드!!👍😊 n = int(input()) word_list = list(..

[python] 백준 1269번 대칭 차집합
알고리즘/백준2022. 2. 4. 23:32[python] 백준 1269번 대칭 차집합

문제 풀이 집합 같은 경우 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)))

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

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

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

문제 풀이 문자열 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의 개수..

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

문제 풀이 문제에서 나와있다시피 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)

image