이 예제는 백준, 프로그래머스 등등 코테 알고리즘 문제에 기본으로 나오는 단골 문제이므로, 

기본을 손과 머리에 익히면 좋을 것 같아 정리합니다.


문제

다음과 같이 *을 출력하는 코드를 for 반복문을 사용해 작성하세요. 이중 for 반복문을 사용해서 코드를 작성하세요

 

실행결과

 

접근

이중 for문을 사용해서 별을 찍을 때

첫 번째의(바깥쪽) for문은 총 줄의 개수를 정하고,

두 번째의(안쪽) for문은 총 칸의 개수를 정한다.

 

즉, 바깥쪽 for 문 = 행 (바깥쪽 for문 반복이 3이면 총 3행)

     안쪽 for 문 = 열 (안쪽 for문 반복이 6이면 총 6열)

 

위 문제의 경우, 총 행의 수는 5이므로 바깥쪽 for 문의 반복 횟수는 5이다.

열의 수는 1행 = >1, 2행 => 2, 3행 => 3의 변화하는 등차수열을 띄므로 반복 횟수가 변수라는 것을 알 수 있다.

 

위의 접근으로 코드를 작성하면 다음과 같다.

for i in range(0,5):    # 이 줄은 행 반복을 담당합니다.
    for j in range(1,i+1):    # 이 줄은 열 반복을 담당합니다.
        print('*', end='')     # 별 출력
    print()

결과

동일하게 잘 출력되었다.

 

 

깨알 지식

 

line 3의 print('*')로 작성하면 파이썬에서 print()를 실행하고 나서 자동으로 줄 바꿈이 추가되므로

*

 

*

*

 

*

*

*

...

와 같이 출력이 된다. 따라서 별이 연달아 찍히게 하기 위해 end=''를 추가해준다.

한 행의 출력이 끝나면 print()를 실행하게 하여 줄바꿈이 가능하게끔 한다.

 

이중 for문을 사용하지 않고도 충분히 별을 찍을 수 있다.

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

이 게시글은 위 예제를 설명하려고 한 것은 아니고, count 함수의 사용을 정리하고자 적은 것입니다.


우선, iterable 자료형에 대해서 알아보자

 

iterable = 반복 가능한

 

이라는 뜻으로 프로그래밍에서 반복 가능한(자료형) 것은 문자열(str), 리스트(list), 집합(set), 튜플(tuple)이 있다.

 

count 란

파이썬에서 iterable 자료형에 count 함수를 사용하면 특정 문자 또는 문자열이 몇 개 포함되어 있는지 세어서 반환해준다.

 

함수 형식

iterable자료형.count(문자 또는 숫자)

 

a = [1, 1, 2, 1, 3, 4]

# a 리스트 내의 1의 개수 조사
b = a.count(1)

#출력
print(b)

결과

count 함수를 적절하게 사용하면 for문을 돌리면서 하나씩 일치 여부를 찾을 필요가 없으므로, 잊지말고 사용하자

이 예제는 너무나도 유명한 윤년을 활용한 문제이다.

중점으로 봐야할 부분은 조건문의 조건을 어떻게 간결하게 할 것인지다.


문제

2월 29일까지 있는 해를 윤년이라고 합니다. 윤년의 조건은 연도가 4의 배수이면서 100의 배수가 아니거나 400의 배수인 경우입니다. 연도를 입력하고 입력한 연도가 윤년인지 아닌지 판별하는 코드를 작성하세요.

 

 

윤년의 조건은 4의 배수이면서(and) 100의 배수가 아니거나(or) 400의 배수인 경우라고 한다.

수학적으로 괄호로 표현하면 두 가지 경우라고 생각할 수 있을텐데

 

1. (4의배수) and (100의 배수X  or  400의 배수)

 

2. (4의 배수 and 100의 배수X) or (400의 배수)

 

접근

처음에 이 문제를 봤을 때 나는 위 두 개의 조건중에서 1번이 맞다고 생각하여 1번의 코드를 적었다가 어떠한 경우에는 윤년인데 윤년이 아니라는 결과창이 보여서 애를 먹었다.

국어를 못하는 건지 말장난에 걸린건지 (2)의 경우라고 생각하고 문제를 읽으니 고개가 끄덕여진다.

그럼 (2)번이 곧 윤년의 조건이니 (2)에 기반하여 코드를 작성했다.

 

n = int(input('연도를 입력하세요: ')

if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0:
    print('윤년입니다.')
else: print(n, '년은 윤년이 아닙니다.')

 

결과

2024년이 윤년이라는 것을 이 예제를 풀고 알았다 :)

29번에서는 리스트에 있는 문자로 문자열을 만들어 보았다.

2023.08.17 - [BOOK/파이썬 문제풀이 100] - 29. 리스트 안에 있는 문자로 하나의 문자열 만들기(join)

 

29. 리스트 안에 있는 문자로 하나의 문자열 만들기(join)

join() 이란 파이썬에서 리스트가 있을 때, 이 리스트의 문자열들을 연결(join)하여 하나의 문자열을 만들고 싶을 때 join()을 사용한다. 즉, 리스트 -> 문자열 함수 형태 문자열변수이름 = '문자와문

jijibae.tistory.com


이번에는 문자열을 분리해 리스트를 만들어주는 split()에 대해서 알아보자

 

split 이란

파이썬에서 문자열을 단어와 단어로 분리할 때 split()를 사용한다.

즉, 문자열 -> 리스트

 

함수 형태

리스트변수이름 = 문자열.split(단어사이를분리할문자)

 

예시1. 문자열을 공백 단위로 분리

# 문자열 생성
text = 'Jisu Haneul Mother Father'

# 공백 단위로 문자열 분리 후 리스트로 저장
result = text.split()

# 출력
print(result)

결과

예시2. 문자열을 Dot(.) 단위로 분리

a = "안녕하세요. 저는 초보 개발자입니다. 우리 같이 열심히 해요."

# 문자열을 나누어 리스트로 만들 b 정의
b = a.split('.')

#출력
print(b)

결과

마지막 dot의 뒤까지 나눈 것을 볼 수 있다.

깨알지식

코딩테스트에서 입력 받을 때, input().strip().split() 으로 입력을 받는데

input()은 한 줄을 받는 함수이고,

strip()은 처음과 끝의 공백을 없애주는 함수이고,

split()은 문자열을 일정한 단위로 나누어 리스트로 만들어주는 함수이다.