본문 바로가기

알고리즘 (Python)

(261)
[구간 합] 구간 합 구하기 5 (백준 11660번) - 파이썬(python) 구간 합 구하기 5 (11660번) 시간 제한 : 1초 메모리 제한 : 256 MB 문제 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다. 예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자. 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다. 표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오. 입력 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1..
[구간 합] 나머지 합 구하기 (백준 10986번) - 파이썬(python) 나머지 합 구하기 (10986번) 시간 제한 : 1초 메모리 제한 : 256 MB 문제 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 106, 2 ≤ M ≤ 103) 둘째 줄에 N개의 수 A1, A2, ..., AN이 주어진다. (0 ≤ Ai ≤ 109) 출력 첫째 줄에 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 출력한다. 예제 입력 5 3 1 2 3 1 2 예제 출력 7 해답 import sys input = sy..
[배열과 리스트] 숫자의 합 구하기 - 파이썬(python) 숫자의 합 (11720번) 시간 제한 : 1초 메모리 제한 : 256 MB 문제 N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. 출력 입력으로 주어진 숫자 N개의 합을 출력한다. 예제 입력 1 1 예제 출력 1 해답 n = int(input()) numlist = list(input()) count = 0 for i in range(n): count = count + int(numlist[i]) print(count) 풀이 numlist 배열에 list형식으로 입력을 받아준 뒤, count할 때 int형으로 변환해서 계산합니다.
[백준] 정렬 알고리즘 - 국영수 (10825번) #파이썬#python 국영수 (10825번) 시간 제한 : 1초 메모리 제한 : 256 MB 문제 도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오. 국어 점수가 감소하는 순서로 국어 점수가 같으면 영어 점수가 증가하는 순서로 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.) 입력 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1..
특정한 값의 원소를 모두 제거하기 - 파이썬(python) 다른 언어에서는 remove_all() 같은 함수로 쉽게 특정한 값의 원소를 모두 제거할 수 있습니다. 하지만 파이썬은 위와 같은 함수가 없으므로 다른 방법을 이용하여야 합니다.
특정 크기의 2차원 리스트 초기화하기 - 파이썬(python) 크기가 4*3인 배열 aa와 ab를 만들어 주었습니다. aa와 같은 형식으로 초기화하게 되면, aa[1][3]에 값을 대입할 때 aa[0][3], aa[1][3], aa[2][3] 3가지 값 모두 값이 변합니다. 이는 내부적으로 포함된 모든 리스트가 동일한 객체에 대한 레퍼런스로 인식되기 때문입니다. 이를 해결하는 방법은 리스트 컴프리헨션 방식으로 2차원 리스트를 초기화해야 합니다.
소수점 값 비교하기 - 파이썬(python) 컴퓨터 시스템은 숫자형 데이터를 처리할 때 2진수를 이용합니다. 2진수 체계에서는 0.9라는 값을 정확히 표현할 수 있는 방법이 없습니다. 아래 예제에서 a의 값과 if 조건문을 확인해보면, 0.3+0.6이 0.9로 정확히 표현되지 않습니다. 문제에서 소수점 값을 비교하기를 요구한다면, round() 함수로 해결할 수 있습니다. round() 함수의 첫 번째 인자는 실수형 데이터, 두 번째 인자는 반올림 될 위치입니다. 두 번째 인자를 생략한다면 소수점 첫째 자리에서 반올림합니다. round() 함수를 사용하였습니다. 두 번째 인자로 2를 사용했으니 a값은 0.90가 됩니다.
[구현 알고리즘] 문자열 재정렬 - 파이썬(python) 문자열 재정렬 난이도 : 下 풀이 시간 : 20분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 n = input() munja, sutja = [], [] for i in n: if i.isdecimal(): sutja.append(i) else: munja.append(i) munja.sort() sum = 0 for i in sutja: sum = sum + int(i) munja.append(str(sum)) print(''.join(munja)) 예시 data = input() result = [] value = 0 # 문자를 하나씩 확인하며 for x in data: # 알파벳인 경우 결과 리스트에 삽입 if x.isalpha(): result.append(x) # 숫자는 따로 더하기 ..
[백준] 구현 알고리즘 - 럭키 스트레이트 (18406번) #파이썬#python 럭키 스트레이트 (18406번) 시간 제한 : 1초 메모리 제한 : 256 MB 문제 어떤 게임의 아웃복서 캐릭터에게는 럭키 스트레이트라는 기술이 존재한다. 이 기술은 매우 강력한 대신에 항상 사용할 수는 없으며, 현재 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다. 특정 조건이란 현재 캐릭터의 점수를 N이라고 할 때 점수 N을 자릿수를 기준으로 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 예를 들어 현재 점수가 123,402라면 왼쪽 부분의 각 자릿수의 합은 1+2+3, 오른쪽 부분의 각 자릿수의 합은 4+0+2이므로 두 합이 6으로 동일하여 럭키 스트레이트를 사용할 수 있다. 현재 점수 N이 주어졌을 때, 럭키 스트레이..
[구현 알고리즘] 럭키 스트레이트 - 파이썬(python) 럭키 스트레이트 난이도 : 下 풀이 시간 : 20분 시간 제한 : 1초 메모리 제한 : 256 MB 해답 score = input() half_length = len(score) // 2 front = score[0:half_length] back = score[half_length:] front_sum, back_sum = 0, 0 for i in range(len(front)): front_sum = front_sum + int(front[i]) for i in range(len(back)): back_sum = back_sum + int(back[i]) if front_sum == back_sum: print("LUCKY") else: print("READY") 예시 n = input() lengt..