18406번: 럭키 스트레이트 첫째 줄에 점수 N이 정수로 주어진다. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다. www.acmicpc.net 시간 제한이 1초였고, N도 99,999,999이하인데 어차피 반으로 나눠서 더하므로 sum 함수를 이용해서 더해주면 된다. 내 풀이 # Q_07_럭키 스트레이트 arr = list(map(int, input())) length = len(arr) if sum(arr[:length // 2]) == sum(arr[length // 2:]): print("LUCKY") else: print("READY") 풀이 코드 # Q_07_럭키 스트레이트 n = input() length = len(n) summary = 0 ..
파이썬

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 프로그래머스에 있는 문제다. 시간 제한이 1초이므로 2,000만 번 정도의 연산이 가능하다고 생각할 수 있다. 주어진 food_times 리스트의 길이가 정확성 테스트의 경우 1 이상 2,000 이하이고, 효율성 테스트의 경우 1이상 200,000 이하이다. 정확성 테스트만 보고 O(N^2)도 가능하겠다고 생각했지만 효율성 테스트를 보고 O(NlogN)이상은 안되겠다는 생각이 들었다. 그리고 K의 범위도 정확성 테스트의 경우 1 이상 2,000,000 이하이고 효율성 테스트의 경우 2 X 10^13개였다. 그..
주어진 볼링공의 개수(N)이 1,000 이하고, 시간 제한은 1초였다. 그러므로 O(N^2)의 시간복잡도로 충분히 풀 수 있다. 그래서 처음에는 단순하게 1번~N번의 볼링공까지 for문을 돌면서 자기 다음 번호 ~ N번까지의 공들을 확인해서 자기 자신과 같은 값 빼고 +1을 해주면 답이 나온다고 생각했다. 좀 더 생각해보니 더 간단한 로직이 있었다. 각 볼링공 무게를 인덱스로 하는 리스트를 만들어서 볼링공 무게마다 볼링공이 몇개 있는지 저장한다. 그 후 특정 볼링공 무게에 해당하는 볼링공의 개수가 0이 아닌 경우, 특정 볼링공 무게의 볼링공 개수 개수 * (전체 볼링공 개수 - 특정 볼링공 무게의 볼링공 개수) 를 무게마다 구해서 더해준 다음에 2로 나눠주면 답이 나온다. 내 풀이 # Q_05_볼링공 고..
03_문자열 뒤집기 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 happenundo.tistory.com
1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 입력받는 문자열 s의 길이가 100만보다 작은데 시간 제한은 2초였다. 2초라면 파이썬의 경우 약 4,000만 번의 계산이 가능한 시간이므로 O(NlogN)의 시간까지도 가능하다고 생각했다. 물론 O(N)도 가능하다. 그러므로 그냥 반복문을 통해 문자열을 돌면서 뒤집는 횟수의 최솟값을 구하면 된다고 생각했다. 그래서 단순히 생각해서 1을 뒤집는 경우와 0을 뒤집는 경우 모두 for문을 돌려서 두 결과값 중 작은 값이 답이 된다. for문을 2번 돌리는 것이라서 ..
02_곱하기 혹은 더하기 각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 숫자를 확인하여 숫자 사이에 곱하기 혹은 더하기 연산자를 넣어서 만들어질 수 있는 가장 큰 수를 구하는 프로그램이 happenundo.tistory.com 위 문제를 풀다가 잠시 헷갈렸던 점을 정리해보자. 위 문제에서 import.sys input = sys.stdin.readline 을 통해서 입력을 받았다. 이렇게 입력을 받을 경우 한 줄 모두 입력받으므로 numbers라는 변수 끝에 개행 문자까지 들어가게 된다. 예를 들어, '33445'를 입력하면 '33445\n'이 들어간다. input().rstrip()을 통해 개행 문자를 없앨 수 있다. rstrip은 문자열의 오른쪽 공백을 삭제하고, lst..

처음에 문제를 잘못 읽고 여행을 떠날 수 있는 그룹 수의 최솟값을 구했다가 틀렸다. 알고보니 최댓값을 구해야 하는 문제였다. 일단 입력받은 공포도 값 리스트를 내림차순으로 정렬한 후, 큰 숫자의 공포도를 가진 리스트부터 먼저 그룹을 만들어줬다. 그리고 그룹 하나를 만든 후에는 start를 높여서 그룹에 포함된 공포도들을 제외한 리스트의 값들 중의 최댓값을 통해 또 다시 그룹을 만들어줬다. 만약, start값이 end값보다 커지는 경우 더 이상의 그룹 생성은 불가능하다고 할 수 있다. 단, 남은 공포도 값 중 1이 있는 경우에는 혼자 그룹 생성이 가능하므로 남은 리스트 중 1의 개수를 세줘서 그룹 수에 더해줬다. 내 풀이 # Q_01_모험가 길드 n = int(input()) # 모험가의 수 arr = l..

1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 파이썬 itertools 라이브러리의 combinations를 써서 풀었다. 통과는 했으나 4중 for문까지 들어가므로 성능이 별로라고 생각한다. 자음이 2개 이상 들어가야 한다는 조건을 빼먹어서 틀렸다. 고치니 바로 정답! 내 풀이 # 기타 알고리즘_B_2_암호 만들기 import itertools l,c = map(int, input().split()) temp_list = list(input().split()) # 알파벳 종류 ㅣㅇㅂ력받기 consonants =..
파이썬 (Python) - 깊은 복사 (Deep Copy) 파이썬 (Python) - 깊은 복사 (Deep Copy) 알고리즘을 풀다 보면 원본배열의 보존을 위해 배열을 복사할 필요를 느낄때가 많다. 객체를 무작정 복사해서 사용하면 원본 객체가 핸들링되어 데이터가 변 crackerjacks.tistory.com 이해하기 쉬운 개념이지만, 놓칠 경우 큰 문제가 발생할 수 있는 개념이다.