Baekjoon - 1차원배열

do yeon kim·2022년 6월 8일
0

1차원배열

10818번 최소,최대

방법1
limit = int(input())    
while True:
    a = list(map(int,input().split()))    
    if len(a) == limit :
        max = a[0]        
        min = a[0]

        for i in range(len(a)):
            if max < a[i]:
                max = a[i]
            
            if min > a[i]:
                min = a[i]

        print(min, max)
        break
    
    else:
        print("다시 입력하세요")


방법2
limit = int(input())    
while True:  
    a = list(map(int,input().split()))    
    if len(a) == limit : 
        print(min(a),max(a))
        break    
    else:
        print("limit 수보다 많은 수를 입력했습니다."
        print("다시 입력해 주세요")

방법3
limit = int(input())    
while True:
    a = list(map(int,input().split()))    
    if len(a) == limit :
        a.sort()
        print(a[0])
        print(a[len(a)-1])
        break
    
    else:
        print("다시 입력하세요")

if len(a) == limit
방어코드로 처음 입력받은 수보다 더 많은 수를 입력하게 될 경우 다시 입력받는 식으로 코드를 구현

방법1
for문을 이용해서 list안의 요소들을 하나씩 돌면 비교하며 최대값과, 최소값을 업데이트
첫번째 요소를 max = a[0] min = a[0] 으로 설정 후 for문을 돌면서 새로운 데이터로 업데이트

방법2
min() max 함수를 이용해서 구현

방법3
sort()함수를 이용해서 정렬 후 첫번째 요소와 마지막 요소를 출력
오름차순으로 정렬되므로 첫번째 값은 최소값이 되고, 마지막 요소는 최대값이 된다.




2562번 최댓값

방법1
result = []
for i in range(9):
    number = int(input())
    result.append(number)


print(max(result))
print(result.index(max(result))+1)



방법2
result = []
for i in range(9):
    number = int(input())
    result.append(number)

max = result[0]
for i in range(len(result)):
    if max < result[i]:
        max = result[i]
        max_pos = i + 1      

print(max)
print(max_pos)

방법1
max()함수와index()함수를 이용해서 구현
index()함수는 ()에 요소의 값을 넣었을 경우 있으면 인덱스 번호, 없으면 -1을 반환한다.
결과로는 몇 번째 있는지를 물었으므로 인덱스 번호에 +1한 값을 구한다.

방법2
첫번째 요소를 최대값으로 놓고 요소를 돌면서 최대닶 업데이트하는 식으로 구현





2577번 숫자의 개수

result = []
for i in range(3):
    a = int(input())
    result.append(a)

multi = result[0] *result[1]*result[2]
multi = str(multi)

for i in range(10):
    print(multi.count(str(i)))



3052번 나머지

result = []
for i in range(10):
    a = int(input())
    result.append(a)

new_result = []
for i in range(len(result)):
    remainder = result[i] % 42
    new_result.append(remainder)


final_list =[]
for i in new_result:
    if i in final_list:
        pass
    else:
        final_list.append(i)

print(len(final_list))

42로 나눈 나머지 값들을 리스트로 만들었다.
다른 결과리스트를 만들고 나머지리스트를 for문을 돌려서 만약 final_list결과 리스트 안에 값이 있다면 pass, 아니라면 append해 주었다.
그리고, final_list의 길이를 구하면, 중복되지 않는 값을 구할 수 있다.





1546번 평균 
a = int(input())

score_list = list(map(int, input().split()))

avg = max(score_list)

a = [score/avg*100 for score in score_list]

new_avg = sum(a)/len(a)
print(new_avg)



8958번 OX퀴즈
a = int(input())
for i in range(a):
    b = input().split()
    point = 1
    score = 0
    
    if b[0][0] == "O":
        score = score + point
    else: 
        pass
    
    for j in range(1, len(b[0])):
        if b[0][j] == "O":
            if b[0][j-1] == "O":
                point = point+1   
            else:
                point = 1
            score = score + point
    print(score)    
    




4344번 평균은 넘겠지
여러번 실패

방법1
cases = int(input()) #케이스 수를 받는다.
new_result = []
for _ in range(cases): #케이스 수 만큼 반복문을 수행
    b = list(map(int,input().split())) 학생수와 성적을 받은 것을 리스트로 만든다.
    
    score_sum = sum(b[1:]) #sum() #함수와 슬라이싱을 이용한 합계
    scroe_avg = score_sum/b[0]  #합계를 학생 수로 나누어서 평균
    
    result = []
    ##이부분에서 틀림 for문을 돌아야 되는 것은 점수에 해당 하는 1번째 부터이다.
    for i in b[1:]: 
        if i > scroe_avg:
            result.append(i) #결과를 다른 리스트에 append
    
    ratio = len(result)/b[0] *100       
    new_result.append(ratio)


for i in new_result: # 결과 리스트를 돌면서 출력
    print(str(format(i, ".3f")) + "%")
   


방법2 - 위의 코드와 대부분 같다.
방어코드를 추가 해주었다.
cases = int(input())
new_result = []
for _ in range(cases):

    while True:
        b = list(map(int,input().split()))
        if b[0] == len(b[1:]): 
            score_sum = sum(b[1:])
            scroe_avg = score_sum/b[0]
            
            result = []
            for i in b[1:]:
                if i > scroe_avg:
                    result.append(i)
            
            ratio = len(result)/b[0] *100       
            new_result.append(ratio)
            break
        
        else:
            print("학생의 숫자와 점수의 수가 다릅니다.")

for i in new_result:
    print(str(format(i, ".3f")) + "%")
   

방법2
방어코드를 추가 해주었다.
학생 수와 점수를 받는 입력코드에서 만약 학생 수보다 점수가 많거나 적으면 다시 입력받게 while문을 이용해서 무한 루프를 돌며, if문으로 b[0]len(b[1:])의 길이 가 같은지로 조건을 만들었다.

0개의 댓글