배열
2024. 11. 12. 16:26ㆍ정보처리,전산/코딩 : 문제해결
반응형
출석 체크를 할 때 출석한 학생 수를 계산하거나, 투표에서 가장 많이 선택된 후보를 찾는 등의 작업을 배열을 사용해 효율적으로 처리할 수 있다.
1. 출석 체크에서 출석하지 않은 학생 수 구하기
출석한 학생들을 배열로 표시한 다음, 출석하지 않은 학생들의 수를 구할 수 있다. 이때 출석 여부를 1과 0으로 표시하여 출석한 학생들의 총합을 통해 계산할 수 있다.
# 예시: 30명의 학생 중 일부만 출석했다고 가정
students = [0] * 31 # 학생 번호 1~30까지 관리 (0번째는 사용하지 않음)
for i in range(28): # 출석한 학생 번호 28명을 입력받음
n = int(input())
students[n] = 1 # 출석한 학생은 1로 표시
total_present = sum(students) # 출석한 학생들의 총합
absent_count = 30 - total_present # 전체 학생 수에서 출석한 학생 수를 뺌
print("출석하지 않은 학생 수:", absent_count)
2. 선거에서 가장 많은 표를 받은 후보 찾기
선거에서 각 후보가 받은 표 수를 배열로 나타내고, 그 중에서 가장 많은 표를 받은 후보의 인덱스를 찾아낼 수 있다.
# 예시: 5명의 후보가 있다고 가정하고, 각 후보가 받은 표 수를 입력
votes = [10, 25, 30, 15, 20] # 각 후보가 받은 표 수
max_votes = max(votes) # 가장 많은 표 수
winner_index = votes.index(max_votes) # 그 표 수를 가진 후보의 인덱스 찾기
print(f"가장 많은 표를 받은 후보: 후보 {winner_index + 1}, 득표 수: {max_votes}")
- 출석체크: 출석 여부를 이진 값(0, 1)으로 기록한 후, 전체 학생 수에서 출석한 학생 수를 빼서 출석하지 않은 학생을 구할 수 있다.
- 선거 카운트: 각 후보에 대한 득표 수를 배열로 기록한 뒤, max() 함수와 index() 함수를 사용해 최다 득표 후보를 찾을 수 있다.
배열을 사용한 방법은 출석 체크나 투표 집계와 같은 카운팅 작업을 효율적으로 처리하는 데 유용하다.
■ 각 알파벳이 처음 등장하는 위치
s =input()
check=[-1] *26
for i in range(len(s)):
index=ord(s[i])-ord('a')
if check[index] ==-1:
check[index]=i
for i in range(26):
print(check[i],end=" ")
- check = [-1] * 26:
- 소문자 알파벳의 총 개수인 26개의 원소로 이루어진 리스트 check를 만든다. 리스트의 모든 원소는 -1로 초기화되어 있다. 이 리스트는 각 알파벳이 처음으로 등장한 위치를 저장하는 용도로 사용된다.
- , check[0]은 'a'의 위치를, check[1]은 'b'의 위치를 저장하는 방식이다.
- for i in range(len(s))::
- 문자열 s의 각 문자를 하나씩 순회하는 반복문이다. 여기서 i는 문자열에서 문자의 인덱스(위치)를 나타낸다.
- index = ord(s[i]) - ord('a'):
- ord() 함수는 문자의 아스키 코드 값을 반환한다. 여기서는 해당 문자가 알파벳에서 몇 번째 문자인지를 계산한다.
- , s[i]가 'a'라면 ord('a')는 97이므로, ord(s[i]) - ord('a')는 0이 된다. 즉, 'a'는 0번째 인덱스에 해당한다.
- 마찬가지로 'b'는 1, 'c'는 2, ..., 'z'는 25가 된다.
- if check[index] == -1:
- 해당 알파벳이 처음 등장하는 위치를 기록하기 위해, check[index] 값이 -1인 경우(즉, 아직 해당 문자가 등장하지 않은 경우)에만 그 위치를 저장한다.
- check[index] = i:
- 해당 문자가 처음 등장한 위치 i를 check[index]에 저장한다.
- for i in range(26)::
- 26개의 알파벳에 대해 저장된 값을 하나씩 출력하는 반복문이다.
- print(check[i], end=" "):
- check 리스트에 저장된 값을 출력한다. 각 알파벳이 처음 등장한 위치가 출력되며, 등장하지 않은 알파벳은 여전히 -1로 출력된다.
- end=" "는 출력 결과를 한 줄에 공백으로 구분하여 출력하도록 설정하는 부분이다.
출력 예시
입력: hello
출력: -1 1 2 3 4 ...
이 출력에서:
- 알파벳 'h'는 입력 문자열에서 0번째 위치에 처음 등장했으므로 그 자리에 해당하는 값이 0이 된다.
- 'e'는 1번째, 'l'은 2번째, 그리고 'o'는 4번째에 처음 등장한 것을 기록한다.
- 나머지 알파벳은 입력 문자열에 등장하지 않으므로 -1로 남아있다.
■ 문자열 숫자 합 구하기
s = input() # 숫자 문자열 입력
sum = 0
for i in range(len(s)):
# 문자를 숫자로 변환하고 합계에 더함
sum += ord(s[i]) - ord('0')
print(sum) # 최종 합계 출력
반응형
'정보처리,전산 > 코딩 : 문제해결' 카테고리의 다른 글
카톡 오픈채팅방 입출기록 (0) | 2025.01.11 |
---|---|
소인수 개수 (0) | 2024.07.21 |
배열 자리 거꾸로 swap (0) | 2024.06.22 |
배열에서 각 요소보다 작은 요소들의 수 (0) | 2024.04.19 |
원형 큐 circular queue (0) | 2024.04.10 |