Notice
Recent Posts
Recent Comments
Archives
04-29 03:41
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

줴림이 공부하줴림

[SWEA] [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 7. 흐름 제어 - 반복 본문

Study/SWEA

[SWEA] [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 7. 흐름 제어 - 반복

줴림 2025. 4. 2. 15:01

어제 처음으로 티스토리에 글을 썼는데, 거기에 삘 받아서 티스토리 꾸민다~ 블로그 꾸민다~ 난리를 치다가 시간만 죽이고 그냥 침대로 들어가버린 나... 오늘부턴 절대 그럴 일이 없도록 다시 기초부터 한 번에 싹 끝낸다!

그래야 백준 문제 뭘 풀든가 말든가 하지...

 

1. 다음의 결과와 같이 5명의 학생의 점수에 대해 60 이상일 때 합격 메시지를 출력하고, 60미만일 때 불합격 메시지를 출력하는 프로그램을 만드십시오.

score = [88, 30, 61, 55, 95]

for i in range(len(score)):
    if (score[i] >= 60):
        print("%d번 학생은 %d점으로 합격입니다." % (i+1, score[i]))
    else:
        print("%d번 학생은 %d점으로 불합격입니다." % (i+1, score[i]))

이 문제는 입력값이 없길래 그러면 어떻게 해야하는거지? 하고 고민 좀 했다. 알고보니 내가 점수를 일일이 넣어야하는 것일줄은...

 

2. 1부터 100까지의 숫자를 for 문과 range 함수를 이용해 출력하십시오.

for i in range(1, 101):
    print(i)

 

3. 1부터 100까지의 숫자 중 짝수를 for 문을 이용해 다음과 같이 출력하십시오.

ans = ''
for i in range(2, 101, 2):
    ans += str(i) + ' ' 
print(ans)

 

4. 1부터 100까지의 숫자 중 홀수를 for 문을 이용해 다음과 같이 출력하십시오.

ans = ''
for i in range(1, 101, 2):
    ans += str(i) + ', '
print(ans[:-2])

 

5. 1부터 100까지의 숫자 중 3의 배수의 총합을 for문을 이용해 출력하십시오.

total = 0
for i in range(1, 101):
    if (i % 3) == 0:
        total += i
        
print("1부터 100사이의 숫자 중 3의 배수의 총합: %d" % (total))

 

6. 다음은 10명의 학생들의 혈액형 데이터입니다. for문을 이용하여 각 혈액형 별 학생수를 구하십시오.

blood = ['A', 'A', 'A', 'O', 'B', 'B', 'O', 'AB', 'AB', 'O']
count = {'A': 0, 'O': 0, 'B': 0, 'AB': 0}

for i in blood:
    if i == 'A':
        count['A'] += 1
    elif i == 'B':
        count['B'] += 1
    elif i == 'O':
        count['O'] += 1
    else:
        count['AB'] += 1
        
print(count)

딕셔너리 쓰는 법도 좀 익숙해져야 할 듯 싶다.

 

7. 다음은 학생의 점수를 나타내는 리스트입니다. while 문과 리스트 객체의 pop()을 이용해 80점 이상의 점수들의 총합을 구하시오.

student = [85, 65, 77, 83, 75, 22, 98, 88, 38, 100]
total = 0

while student:
    score = student.pop()
    if score >= 80:
        total += score
print(total)

 

8. while문을 이용해 아래와 같이 별을 표시하는 프로그램을 만드십시오.

i = 0
while (i < 6):
    print("*" * (5-i))
    i += 1

처음에 이렇게 작성하고 test 돌렸는데 잘 나와서 그냥 제출했더니 fail이 떴다. i=0으로 시작하면 안되는 거였을까?

i = 5
while (i > 0):
    print("*" * (i))
    i -= 1

이렇게 바꾸니까 바로 pass가 나왔다. 뭐가 다른가?

 

9. while문을 이용해 아래와 같이 별을 표시하는 프로그램을 만드십시오. (근데 이번에는 가운데 정렬)

i = 0	# 띄어쓰기 개수
t = 7	# 전체 별 개수

while (t > 0):
    print(" " * i + "*" * t + " " * i)
    i += 1
    t -= 2

이 문제.. 옛날에 1학년 때 컴프 들을 때도 했었는데 애먹었던 기억이 있다. 그 때는 C언어로 했지만 지금은 python이라는 게 차이점이라면 차이점일지도.

 

10. 다음과 같이 어떤 한 양의 정수를 입력하여 그 숫자에 0~9가 몇 번 사용되었는지 표시하십시오.

num = list(map(int, input()))
count = [0] * 10

for i in num:
    count[i] += 1

print("0 1 2 3 4 5 6 7 8 9")
print(*count)

이번 문제는 살짝 애먹었다. 역시나 인터넷 님의 도움을 받았는데... 입력을 받아서 map을 이용해서 한 자리 한 자리 끊어내는 건 좀 외워야 하나 싶다. 전에도 본 거 같은데 영 생각이 안 나네..

그리고 신박했던 거, 리스트 앞에 * 붙이면 그냥 0 1 2 3 4 5 ... 이런 식으로 출력된다. 되게 유용할 듯? 메모메모

 

11. for문을 이용해 별을 표시하는 프로그램을 만드십시오.

for i in range(1, 6):
    print(' ' * (5-i) + '*' * i)

죽지 않고 돌아온 별 출력 문제

 

12. 다음과 같이 10진수를 2진수로 변환하는 프로그램을 만드십시오.

네?? 잠깐 일단 10진수를 2진수로 변환하는 원리에 대해 생각해보자.

예를 들어 11이 있다. 그럼 11을 2로 나누고 나머지가 0인지 1인지 본다. 이 나머지가 2진수 맨 오른쪽 자리 숫자다. 그리고 몫이 0이 될 때까지 계~~속 나눠주면 되는데... 이걸 어떻게 구현하지?

num = int(input())
binary_num = ''

while (num > 0):
    binary_num += str(num % 2) + binary_num
    num = num // 2

print(binary_num)

이렇게 작성했더니, 8 넣었을 때 결과가 '000000010000000' 이딴 식으로 나온다. 어디가 문젤까....

찾았다. binary_num += str(num % 2) ~가 아니라 binary_num = str(num % 2) ~로 했어야 했다. 그러니까 이상한 값이 나오지.

num = int(input())
binary_num = ''

while (num > 0):
    binary_num = str(num % 2) + binary_num
    num = num // 2

print(binary_num)

 

반복문 연습문제 끝!! 이어서 함수 기초 문제 풀어야지. 그 전에 홍차 한 잔 마시고...