[CodeUp 기초 100제] 6083번 풀이 with 파이썬(python)

Jeony·2021년 9월 14일
0

codeup 기초 100제

목록 보기
83/98
post-thumbnail

문제

종합

빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때,
주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자.

입력 예시

2 2 2

출력 예시

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
8

답안

모델 답안

n = int(input())

for i in range(1, n+1) :
    if i%10==3 or i%0==6 or i%10==9 :
        print("X", end=" ")
    else:
        print(i, end=" ")

내 답안

r, g, b = input().split()
r, g, b = int(r), int(g), int(b)
count = 0

for r_index in range(r):
    for g_index in range(g):
        for k_index in range(b):
            count += 1
            print(r_index, g_index, k_index)
print(count)

풀이

내 풀이

저는 이 문제를 풀면서 출력예시에
0 0 0
0 0 1
0 1 0
0 1 1
이렇게 계속 출력되길래 입력 값 2 2 2를 곱해서 for문을 8번 반복시키면서 0~7의 수를 2진수로 표현해야 하는 줄 알고 계속 다른 방향으로 생각을 했어요.. bin()으로 2진수를 표현하려고 했는데 앞에 2진수 표현단위인 0b가 계속 붙어나와서 아닌가보다하고 다른 분들의 풀이를 찾아봤는데 그런 문제가 아니더라고요..😂😓

각설하고 이 문제는 3중 for문 문제예요!
for문을 세번 겹치는거죠.
풀이 갑니다!

  1. 입력을 2 2 2로 하기 위해서 input().split()을 쓰고 r, g, b를 변수로 선언해줍니다.
    각각 입력받은 rgb 변수를 정수형태로 변환시켜줍니다.
    맨 마지막에 횟수를 출력하는게 있어요. 횟수를 쌓기 위해서 count로 변수를 선언해줍니다.
r, g, b = input().split()
r, g, b = int(r), int(g), int(b)
count = 0
  1. 이제 본격적으로 for문을 3번 중첩 시켜줘야 하는데요! 그 이유는...
    (입력값을 2 2 2로 각각 2씩 줬다고 생각해봅시다! for문은 실행을 0부터 2직전인 1까지 실행되겠죠?)
    이렇게 for문을 세번 중첩 시켜놓았을 때
    1) 첫번째 for문의 r_index에 0이 들어와서 실행됩니다.
    2) 근데 실행문에 두번째 for문이 있네요? 두번째 for문의 g_index에 0이 들어가서 실행됩니다.
    3) 어라 또 실행문에 마지막인 세번째 for문이 있네요? 세번째 for문의 b_index에 0이 들어가서 실행됩니다.
    4) 그러고 바로 세번째 for문의 b_index에 1이 들어가서 실행됩니다.
    이렇게 끝까지 간다면 각 r_index, g_index, b_index의 실행 순서는 이렇게 됩니다.
    우리가 원하던 그 것.
r_index 	g_index 	b_index
0	 	0 		0
0 		0 		1
0 		1 		0
0 		1 		1
1		0 		0
1 		0		1
1 		1 		0
1 		1 		1
r, g, b = input().split()
r, g, b = int(r), int(g), int(b)
count = 0
for r_index in range(r):
    for g_index in range(g):
        for k_index in range(b):
  1. 출력. 그리고 실행할 때 결국엔 마지막 for문까지 계속 도달되기 때문에 count를 마지막 for문에 두고 출력은 for문을 나와서 출력!
r, g, b = input().split()
r, g, b = int(r), int(g), int(b)
count = 0
for r_index in range(r):
    for g_index in range(g):
        for k_index in range(b):
            count += 1
            print(r_index, g_index, k_index)
print(count)

input(): 프롬프트를 띄워서 사용자의 입력 받을 수 있게 해준다.
(단, 입력 받은 것은 문자열로 저장된다. print(type()))으로 type() 괄호 안에 변수를 넣고 찍으면 정수인지, 문자열인지, 무슨 타입인지 확일 할 수 있다!)

int(n): 위의 input()에서 말했듯이 input으로 받은 값은 문자열로 저장된다.
산술을 하기 위해, 문자열을 정수로 변환시켜주는 int()를 써서 변환시켜준다.

for문: 반복을 데이터가 남을 때까지 밑에 내용 계속 반복 실행!
for i in 데이터:
(들여쓰기칸) 실행문

ex)

for i in [1, 2 ,3]:
    print(i)
출력: 1
     2
     3

데이터에는 iterable이 들어갈 수 있다.

range(): 괄호 안에 들어가는 숫자만큼의 수열을 표현해준다.
range(3) -> 0, 1, 2 (0부터 3직전까지 표현)
range(1, 3) -> 1, 2 (1부터 시작해서 3직전까지 표현)
range(1, 3, +2) -> 1 (1부터 시작해서 2씩 늘려가서 3직전까지 표현. (1 + 2는 3이므로 3직전까지 표현))

print(): 괄호 안의 내용을 출력!

profile
알고리즘으로 문제를 해결하자 (ʘ言ʘ╬)

0개의 댓글