목록분류 전체보기 (305)
https://www.acmicpc.net/problem/15656 해당 문제는 등장하는 모든 수열을 중복없이 나열하는 문제로, 예전 자바스크립트로 풀던 방식처럼 백트래킹 로직을 활용하여 풀었더랬다. import sys data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r') input_data = data_temp.read().splitlines() def solution (data) : [_,m], temp = map(lambda x : list(map(int, x.split())),data) arr = sorted(temp) result, storage = [],[] def backTracking () : if len(sto..
https://www.acmicpc.net/problem/1966 문제에서 입력은 여러 테스트케이스를 함께 주고, 하나의 테스트 케이스에는 출력 순서를 원하는 요소의 위치와, 요소 집합이 주어진다. 파이썬에서는 모듈로 queue를 제공한다고는 하지만, 모듈을 사용하지 않고 구현해보고 싶다는 생각에 사용하지 않았다. 접근한 풀이 방식은 다음과 같다. 출력을 원하는 위치(location) 0 | 그리고 요소 집합(arr) [1,1,9,1,1,1] 이 주어졌다고 한다면, 요소 집합을 내림차순으로 정렬하여 따로 저장하고, (이는 나가야 하는 숫자의 순서를 의미하는 배열로써 활용) 정렬된 배열의 첫 숫자를 우선 순위 값의 지시표로 활용하였다. 또 특정 위치에 존재하는 값을 따로 저장해두고, 집합에서의 특정 위치에..
https://www.acmicpc.net/problem/2776 문제는 다음과 같다. 쉽게 얘기하면, N개의 테스트 케이스 | 수첩1의 길이 | 수첩1의 내용 | 수첩2의 길이 | 수첩2의 내용이 주어질 때, 수첩2의 요소가 순서 상관없이 수첩1에 포함되어 있다면 1을, 그렇지 않다면 0을 반환하면 된다. a : [1,2,2,3] 배열과 b : [2,3,4] 배열이 있다고 가정했을 때, b의 요소가 a 배열에 포함되있는지 확인하는 방법은 딕셔너리를 활용하거나 혹은 정렬하여 이분탐색으로 활용하는 등 여러 방법이 있겠지만, 나는 중복된 요소를 제거하고 고유한 요소만 남긴다는 특징을 가진 set를 활용하여 문제를 해결했다. (문제에서 주어지는 정수 데이터의 수가 1백만 이하이기 때문에, 키 | 밸류값을 함께..
https://www.acmicpc.net/problem/9506 해당 문제는 특정 수 n이 주어질 때, n을 제외한 n의 약수의 합이 n과 같다면 예제와 같은 문자열을 만들어 반환, 그렇지 않은 경우는 n is NOT perfect.라는 문자열을 반환하는 문제다. 해결한 방식으로는 다음과 같다. 먼저 약수를 담을 리스트를 만든다. 만약 n으로 6이 주어졌다고 한다면 반복문을 통해 1~3까지의 수만 6과 나누어 떨어지는지 계산한 뒤, 리스트에 추가한다. 6은 이미 무조건 약수일 뿐더러, 3을 초과하는 수는 6의 약수가 될 수 없기 때문에 반복문의 범위를 줄인다고 보면 된다. 이후 약수를 담은 리스트의 총합과 n의 값을 비교하여 출력 양식에 맞춰 출력한다. 파이썬 소스코드 import sys temp = ..
len (길이) exam = [1,2,3] print(len(exam)) # 3 in & not in (보유 여부) exam = [1,2,3] print(1 in exam) # True print('1' in exam) # False print(1 not in exam) # False print('1' not in exam) # True 반복문 & 반복문 역순 exam = [1,2,3] # 정순 for el in exam : print(el) # 1 2 3 # 역순 ::-1 / 뒤에서부터 -1 씩 for el in exam[::-1] : print(el) # 3 2 1 max & min (최댓값 & 최솟값) exam = [1,2,3] print(max(exam)) # 3 print(min(exam)) #..
Python을 공부하게 되면서 알게 된 문법 혹은 메서드 정리한다. 자바스크립트와 같은 기능을 가진 메서드는 소괄호로 표현하였다. """ """ (템플릿 리터럴) exam = """안 녕 """ # 안 # 녕 format() exam = '{} is {}'.format('a', 'b') # 'a is b' slice exam = 'abcdef' exam[:3] # abc [0:3] 이므로 0 ~ 2 exam[3:] # def [3:끝] 이므로 3 ~ 끝 exam[3:5] # de split exam = 'abcdef' exam.split() # ['abcdef'] list(exam) # ['a', 'b', 'c', 'd', 'e', 'f'] count # String.count(target, start,..
https://www.acmicpc.net/problem/2338 다른 언어를 공부해보고 싶다는 생각에, 인프런에서 한 시간 정도 강의를 듣고 처음 풀어본 문제다. 간단한 문제지만 이를 위해 소모했던 시간이 크다보니, 이를 기념하는 후기 포스팅을 남긴다. 사실 가장 오래 시간을 소모했던 것은 input 데이터를 받는 초기 설정이었다. 이전 자바스크립트로 문제 풀이를 할 때는, 문제 풀이 | 문제 제출 시 데이터 입력을 받는 코드를 최소화하기 위해 삼항 연산자를 사용하여 input 데이터를 받았더랬다. (이렇게 하지 않으면, 해당 코드를 사용하지 않을 때에도 상황에 맞춰 비활성화해야 한다는 번거로움이 있었기 때문) 그 코드는 아래와 같은데, 이렇게 함으로써 platform === 'linux' 환경에서는 ..
https://school.programmers.co.kr/learn/courses/30/lessons/133502 스택의 원리에 대해 이해하고 있다면 간단히 해결할 수 있는 문제다. 사실 이 풀이 이전에는 replace 메서드를 활용하여 풀이했는데, 절반 이하의 테스트 케이스에서 시간초과로 탈락했다. 스택을 활용한 풀이과정은 다음과 같다. 먼저 스택으로 활용하기 위한 배열을 만든 후, 각각의 값이 들어올 때마다 스택에 추가해준다. 이때 만약 스택에서 마지막에 위치하는 4개의 요소가 '1231'(빵 - 야채 - 고기 - 빵)과 같다면 해당 마지막 4개의 요소를 삭제하고 결괏값에 + 1을 추가한다. 전체 소스 코드 function solution(ingredient) { let result = 0 cons..