[ 6087 ] 코드업 6087 : 3의 배수는 통과
< 문제 >
- n을 입력받아 1부터 n까지 출력하는데, 3의 배수는 출력하지 않는다.
< 문제 푸는 방법 >
- 반복문과 조건문을 이용하여 해결합니다.
- 반복문을 이용하여 1부터 n까지 출력하는데, 조건문을 이용하여 3의 배수일 때에는 출력하지 않도록 합니다.
- print의 end를 사용하여 \n가 아닌 공백문자를 기준으로 출력합니다.
< 코드 1 > : for 문 사용
a = int(input())
for i in range(1,a+1): # 1부터 a까지 반복
if i%3 != 0: # 3의 배수가 아닐때만 출력
print (i, end = " ")
📌 print ( i, end = " " )
print()를 이용하여 출력하면 개행문자가 포함되어 출력된다.
이때 엔터 없이, 한 줄에 여러 개를 출력하기 위해서는 end를 공백으로 지정해주면 된다.
end = '-' 등 다른 문자도 사용할 수 있다.
< 코드 2 > : while 문 사용
n = int(input())
i = 0
while (i < n): # 1부터 n까지 반복.
i += 1
if i % 3 == 0 : continue # 3의 배수일 때에는 continue(다음 반복문으로)
print (i, end = ' ') # 출력 형식
📌 왜 while의 조건이 i<n인지
나는 i = 0으로 초기화했다. 이때 맨 처음 while문에 들어가자마자 i = 1로 증가한다.
n을 포함하지 않는 이유도 마찬가지이다. while문의 조건에 따르면 i는 n-1일 때 마지막으로 들어가는 숫자이다.
이때 i += 1이라는 코드에 의해 i = n 이 된 후 판펼식을 거치므로, i = 0, while (i<n)이 된다.
물론 조건문 밑에 사용하게 되면 i = 1, while(i<=n)을 사용할 수 있다.
하지만 내가 if문에 continue를 사용했기 때문에, 위 처럼 작성할 수밖에 없었다.
< 코드 3 > : for 문의 내포 사용
n = int(input())
result = [i for i in range(1,n+1) if i % 3 != 0]
print (" ".join(repr(i) for i in result))
📌 for 문의 내포는 생소할 수 있다고 생각한다.
두번째 줄 result = [i for i in range(1, n+1) if i%3 != 0] 이라는 줄을 해석해보자면
3의 배수를 제외한 1부터 n까지의 수를 result의 리스트로 삽입하라는 것을 의미한다.
for문의 내포 문법은 다음과 같다.
표현식 for in 리스트명(반복가능개체) if 조건문
표현식 for in range(a, b, c) if 조건문
- 모든 if 문은 생략가능하며, range는 상황에 맞게 매개변수 목록을 작성하면 된다.
📌 리스트 괄호 빼고 출력하기, 콤마 빼고 출력하기
result는 일반 변수가 아닌 리스트이다.
리스트를 출력하게 되면 [ a, b, c, d, ... ] 의 형태로 출력된다.
이때 정답 형식에 맞추기 위해 print (" ".join(repr(i) for i in result)) 를 사용한 것이다.
📌 '구분자'join(매개변수) : 매개변수 ( 리스트 )에 구분자를 넣어 하나의 문자열로 만들어주는 것.
📌 repr : 숫자를 문자열로 변환해주는 역할.
=> result를 문자여롤 변환한 후, join을 이용해 공백을 넣어 문자열 형태로 출력한 것이다.
< 코드 4 > : 코드 3과 동일
n = int(input())
result = [repr(i) for i in range(1,n+1) if i % 3 != 0]
print (' '.join(result))