왜 배열은 1번째부터가 아닌 0번째부터 시작할까?
- 컴퓨터 과학자 다익스트라(Dijkstra)가 코드의 가독성과 오류를 덜 일으키는 최적의 방안이라 제시했기 때문이다.
삽입과 삭제 후 원소들의 위치를 바꾸지 않으면 되지 않을까??
- 삽입이 많을 시에는 배열의 크기가 늘어나며, 삭제 후 원소의 위치를 바꾸지 않는다면 배열의 순서가 보장되지 않으므로 원치 않는 값을 지울 수 있다.
=> 따라서 삽입과 삭제 후에는 반드시 원소의 위치를 바꾸어 주어야 한다.
[문제]
N개의 정수가 주어진다. 이때, 최솟값과 최대값을 구하는 프로그램을 작성하시오.[입력]
첫째 줄에 정수의 개수 N(1 <= N <= 1,000,000)이 주어진다. 뚤째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.[출력]
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
예제 입력 예제 출력 5 7 35 20 10 35 30 7
one = int(input())
two = int(input())
three = int(input())
four = int(input())
...
bigNumber = int(input())
이는 매우 비효율적인 일이기 때문에, 하나의 변수만으로 모든 데이터를 저장하기 위해 배열을 사용한다.
위의 예제에서,
5
20 10 35 30 7
을 입력 받기 위한 코드는 아래와 같다.
n = int(input())
array_list = list(map(int, input().split()))
max_num = array_list[0]
min_num = array_list[0]
max_num = num
min_num = num
n = int(input())
array_list = list(map(int, input().split())) # 정수 n과 n개의 정수를 입력받는다.
max_num = array_list[0]
min_num = array_list[0] # 최댓값과 최솟값을 저장하기 위한 변수를 생성한다.
for num in array_list: # for문을 이용하여 배열을 순회한다.
if num > max_num:
max_num = num # 현재 배열값 num이 max_num값보다 크다면 max_num값을 num값으로 바꿔준다.
if num < min_num:
min_num = num # 현재 배열값 num이 min_num값보다 작다면 min_num값을 num값으로 바꿔준다.
print(min_num, max_num) # 최솟값과 최대값을 출력한다.
[문제]
"나는 요리사다"는 다섯 참가자들이 서로의 요리 실력을 뽐내는 티비 프로이다. 각 참가자는 자신있는 음식을 하나씩 만들어오고, 서로 다른 사람의 음식을 점수로 평가해준다. 점수는 1점부터 5점까지 있다.각 참가자가 얻은 점수는 다른 사람이 평가해 준 점수의 합이다. 이 쇼의 우승자는 가장 많은 점수를 얻은 사람이 된다.
각 참가자가 얻은 평가 점수가 주어졌을 때, 우승자와 그의 점수를 구하는 프로글맹르 작성하시오.
[입력]
총 다섯 개 줄에 각 참가자가 얻은 네 개의 평가 점수가 공백으로 구분되어 주어진다 첫 번째 참가자부터 다섯 번째 참가자까지 순서대로 주어진다. 항상 우승자가 유일한 경우만 입력으로 주어진다.[출력]
첫째 줄에 우승자의 번호와 그가 얻은 점수를 출력한다.
예제 입력 1 예제 출력 1 5 4 4 5 4 19 5 4 4 4 5 5 4 4 5 5 5 4 4 4 4 5
예제 입력 2 예제 출력 2 4 4 3 3 2 17 5 4 3 5 5 5 2 4 5 5 5 1 4 4 4 4
첫 번째 참가자 = 5 4 4 5 -> 합 18
두 번쨰 참가자 = 5 4 4 4 -> 합 17
세 번째 참가자 = 5 5 4 4 -> 합 18
네 번째 참가자 = 5 5 5 4 -> 합 19
다섯 번째 참가자 = 4 4 4 5 -> 합 17
4 19
변수명 = [list(map(int, input().split())) for _ in range(참가자수)]
# 각 참가자들의 점수를 2차원 배열 형태로 입력받는다.
human = [list(map(int, input().split())) for _ in range(5)]
humanScore = [0] * 5 # 참가자들의 총합 점수를 저장하기 위한 배열을 생성한다.
score = 0 # 최대 점수를 저장하기 위한 변수를 생성한다.
for i in range(5): # 0부터 4까지 for문을 탐색해 참가자들을 순회한다.
sum = 0 # 참가자들의 점수를 저장하기 위한 변수 sum 이다.
for j in range(4): # 4번의 평가를 받았으므로, 0~3까지 for문을 실행한다.
sum += human[i][j] # sum에 참가자가 받은 점수를 더해준다.
humanScore[i] = sum # 해당 참가자의 총 점수는 sum에 저장한다.
score = max(score, sum) # 점수의 최댓값을 score에 저장한다.
# 참가자의 총 점수가 score(최대 점수)라면 "i + 1"과 score(최대 점수)를 출력하고 for문을 탈출한다.
for i in range(5):
if humanScore[i] == score:
print(i + 1, score)
break
[문제]
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.[입력]
첫째 줄에 N과 K가 주어진다 ( 1<= K <= N <= 500,000 )
둘째 줄에 N자리 숫저가 주어진다. 이 수는 0으로 시작하지 않는다.
[출력]
입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다.
예제 입력 1 예제 출력 1 4 2 94 1924
예제 입력 2 예제 출력 2 7 3 3234 1231234
예제 출력 3 예제 출력 3 10 4 775841 4177252841
n = 4, k = 2
num = 1924
num = 924, k = 1
num = 94, k = 0
n = 4, k = 2
num = 4321
num = 43, k = 0
n, k = map(int, input().split())
number = list(input())
for i in range(0, len(number)):
while number[i] > number[i - 1] and k:
k -= 1
del number[i - 1]
number.insert(0, 'a')
answer = ''
for i in range(0, len(number) - k):
if number[i] != = 'a':
answer += number[i]
print(answer)