99클럽 코테 스터디 4일차 TIL + 문자열, map(), 슬라이싱, join()

임정민·2025년 1월 16일
0
post-thumbnail

1. 문제 설명

[문제 내용]

고려대학교에 입학한 새내기 호돌이는 안암역을 지나다가 한 붕어빵 장수를 만났어요.

“안녕, 안녕, 안녕하십니까, 아저씨! 붕어빵 두 개 주세요.”

“안녕을 세 번 외쳤으니 붕어빵 세 개!”

붕어빵 두 개의 값을 내고 세 개를 받은 호돌이는 기분이 좋았어요. 호돌이가 붕어빵 하나를 꺼내어 한 입 물었는데…. 너무 뜨거워서 그만 붕어빵을 떨어뜨리고 말았어요ㅠㅠ

붕어빵은 자유 낙하운동을 하면서 땅에 떨어졌는데 신기하게도 좌우가 뒤집힌 모양으로 착지했답니다. 호돌이가 붕어빵을 한 입 물기 전의 모양이 입력으로 주어지면, 땅에 떨어졌을 때에는 어떤 모양일지 출력하세요.

[입력]

첫째 줄에는 두 개의 정수 N과 M(0≤N,M≤10)이 주어집니다. 둘째 줄부터 N개의 줄에 걸쳐 붕어빵의 모양이 주어집니다. 각 행에는 공백을 나타내는 ‘0‘ 또는 붕어빵을 나타내는 ‘1’이 총 M개 주어집니다.

[출력]

입력으로 주어진 붕어빵이 좌우로 뒤집힌 모양을 출력하세요.

[입출력 예]

[힌트]

입력으로 주어지는 각 행을 반전시켜서 출력하면 됩니다. 입력의 1행 1열은 출력의 1행 M열로, 입력의 1행 2열은 출력의 1행 M-1열로 … 입력의 1행 M열은 출력의 1행 1열로 … 입력의 N행 M열은 출력의 N행 1열로 출력하세요.

2. 풀이

N, M = map(int, input().split()) 
fish = []

for _ in range(N):
    fish_in = input()
    fish.append(fish_in[::-1]) 

print("\n".join(fish))

3. 회고

3-1. 문제 해결 과정

드디어 스스로 해낸 문제가 나타났다! 이전에 배운 내용들을 응용해서 최대한 풀어보았는데 다행히 성공했다.

처음에 두 개의 정수 N과 M을 받기 때문에 input().split()이 필요하다는 것을 짐작했다. 하지만 input()은 값을 문자열로 받기 때문에 정수형 처리를 해줘야 했다. 이는 map()을 이용하여 해결했다.

한 줄씩 받아서 저장한 다음, 하나씩 줄바꿈 적용해서 출력하면 해결이 될 거라 생각했다. 그래서 fish라는 빈 리스트를 먼저 선언하고 한 줄씩 append()를 이용하여 저장했다.

참고로 저장할 때는 문제의 출력 조건에 맞게 [::-1]을 이용하여 슬라이싱으로 반전시켰다. 그리고 줄바꿈과 join()을 이용하여 연결해서 출력할 수 있도록 했다.

3-2. 새롭게 배운 내용

  • split()은 문자열 리스트를 반환하기 때문에 int로 변환할 수 없다. map()을 이용하여 map(int, input().split())처럼 두 값을 따로 처리해야 한다.

  • join()은 리스트, 튜플 등의 요소들을 하나의 문자열로 결합할 때 사용한다. "구분자".join(이터러블)처럼 구분자에는 각 요소 사이에 삽입될 문자열을, 이터러블에는 리스트나 튜플 등을 넣으면 각 요소들을 연결해준다.

  • [::-1]은 문자열, 리스트, 튜플 등과 같은 시퀀스 자료형의 순서를 거꾸로 뒤집는다. [시작:종료:단계] 조건을 따르는데 단계 부분에 음수를 사용하면 역방향으로 슬라이싱한다. 결국 [::-1]은 처음부터 끝까지 거꾸로 뒤집는 역할을 하는 것이다.

profile
Data Science and Natural Language Processing

0개의 댓글

관련 채용 정보