Coding Test/초보자를 위한 파이썬 300제

[독학 파이썬] 초보자를 위한 파이썬 300제 풀이(161~170)_12.20

이대코 2022. 12. 20. 15:52

안녕하세요. Harry입니다.

 

현재 풀이중인 초보자를 위한 파이썬 300제 풀이를 진행하면서 나름대로 파악했던 문제 출제 의도와 풀이를 작성했습니다.

모든 풀이는 직접 Pycharm을 통해 에러없이 출력됨을 확인 후 작성했습니다.

 

초보자를 위한 파이썬 300제 풀이는 Wikidocs에 무료로 배포된 전자책을 활용했습니다/

https://wikidocs.net/book/922

[학습목표]

1. 각 문제별 요구하는 역량(출제의도)이 무엇인지 파악할 수 있다.

2. 각 문제별 요구하는 기술 및 기능을 활용하여 문제를 해결할 수 있다.

161 ~ 170

161

for문과 range 구문을 사용해서 0~99까지 한 라인에 하나씩 순차적으로 출력하는 프로그램을 작성하라.

- 요구역량 : for문과 range메서드의 특징을 알고 활용할 수 있는가?

 

 정답확인
for i in range(0,100):
    print(i)

162

월드컵은 4년에 한 번 개최된다. range()를 사용하여 2002~2050년까지 중 월드컵이 개최되는 연도를 출력하라.

- 요구역량 : range함수(시작,끝,증감폭) 을 알고 for문에서 활용할 수 있는가?

range 메서드의 3번째 파라미터가 증감폭을 의미하는 것을 알지 못했습니다. 이렇게 하나 또 배웠습니다.

2002
2006
2010
...
2042
2046
2050

참고) range의 세번 째 파라미터는 증감폭을 결정합니다.

>> print(list(range(0, 10, 2)))
[0, 2, 4, 6, 8]
 정답확인
for i in range(2002,2051,4):
    print(i)

163

1부터 30까지의 숫자 중 3의 배수를 출력하라.

- 요구역량 : range함수(시작,끝,증감폭) 을 알고 for문에서 활용할 수 있는가?

3 
6 
9 
12 
15 
18 
21 
24 
27 
30
 정답확인
for i in range(3,31,3):
    print(i)

164

99부터 0까지 1씩 감소하는 숫자들을, 한 라인에 하나씩 출력하라.

- 요구역량 : range 메서드에서 출력되는 순서가 아닌, 반대의 순서로 for문을 활용하여 출력할 수 있는가?

저의 경우, 슬라이싱의 특징인 [::-1]을 활용하여 처음부터 거꾸로 출력한 반면, 답지의 경우 99에서 i를 차례로 빼서 출력하는 방식을 사용했습니다.

 

 정답확인
for i in range(1,100)[::-1]:
    print(i)
    
#답지
for i in range(100):
    print(99 - i)

165

for문을 사용해서 아래와 같이 출력하라.

- 요구역량 : range 메서드를 통해 소수점을 표현할 수 있는가?

사실 0.1*i 를 한다면,, 부동소수점 오차로 인해 소수점이 기이하게 나오는 걸 확인할 수 있습니다. 그러므로 나눗셈을 활용하는 것이 깔끔합니다.

0.0
0.1
0.2
0.3
0.4
0.5
...
0.9
 정답확인
for i in range(10):
    print(i/10)
    
#뭔가 이상한,,,
for i in range(10):
    print(i*0.1)

166

구구단 3단을 출력하라.

-요구역량 : 특정 정수형과 문자열을 혼합하여 for문을 이용하여 출력할 수 있는가?

3x1 = 3
3x2 = 6
3x3 = 9
3x4 = 12
3x5 = 15
3x6 = 18
3x7 = 21
3x8 = 24
3x9 = 27
 정답확인
for i in range(1,10):
    print(3,"X",i,"=",3*i)

167

구구단 3단을 출력하라. 단 홀수 번째만 출력한다.

- 요구역량 : range메서드의 3번째 파라미터를 활용하여 특정 폭에 부합하는 요소만 for문으로 출력할 수 있는가?

저는 전체 범위(1~9)에서 if문을 써서 짝수를 걸렀고, 답지는 아예 범위를 축소시켜서 출력했습니다.

3x1 = 3
3x3 = 9
3x5 = 15
3x7 = 21
3x9 = 27
 정답확인
for i in range(1,10):
    if i%2 != 0:
        print(3,"X",i,"=",3*i)
        
#답지
num = 3
for i in range(1, 10, 2) :
    print (num, "x", i, " = ", num * i)

168

1~10까지의 숫자에 대해 모두 더한 값을 출력하는 프로그램을 for 문을 사용하여 작성하라.

- 요구역량 : += 개념을 활용하여 범위 전체 수의 합을 for문으로 출력할 있는가?

일단 이게 되려면, 마지막 출력할 하나의 값만 출력하도록 설정해야한다. 그렇기 위해선 print문이 for 내부가 아닌, 외부에 빠져있어야한다.

또한 a+= i 라는 a= a + i 같은의미라는 것을 알고있어야하는데, 이런 개념을 실제로 풀어본 적은 없기에, 당황했고, 못풀었었다.

지금 배웠으니 다행,,

합 : 55
 정답확인
hab = 0
for i in range(1, 11):
    hab += i
print ("합 :", hab)

169 

1~10까지의 숫자 중 모든 홀수의 합을 출력하는 프로그램을 for 문을 사용하여 작성하라.

- 요구역량 : += 개념을 활용하여 범위 내 전체 수의 합을 for문으로 출력할 수 있는가? + range 메서드의 증가폭 파라미터를 활용할 수 있는가?

합: 25
 정답확인
a = 0
for i in range(1,11,2):
    a += i
print("합:",a)

170

1~10까지의 숫자를 모두 곱한 값을 출력하는 프로그램을 for 문을 사용하여 작성하라.

- 요구역량 : *= 개념을 활용하여 범위  전체 수의 합을 for문으로 출력할  있는가

 

 정답확인
a = 1
for i in range(1,11):
    a = a*i
print("곱:",a)

감사합니다.