일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 함수
- 프로퍼티
- nft
- let
- Python
- Execution context
- Interview
- 솔리디티
- Queue
- 블록체인
- 변수
- solidity
- 실행 컨텍스트
- 알고리즘
- frontend
- Deep Dive
- 딥다이브
- Algorithm
- git pull
- 리액트
- 파이썬
- Javascript
- react
- blockchain
- var
- 자바스크립트
- 백준
- 정렬
- 클로저
- BOJ
- Today
- Total
공부하자
[BOJ/Python] 2804. 크로스워드 만들기 본문
문제
창영이는 크로스워드 퍼즐을 만들려고 한다.
두 단어 A와 B가 주어진다. A는 가로로 놓여야 하고, B는 세로로 놓여야 한다. 또, 두 단어는 서로 교차해야 한다. (정확히 한 글자를 공유해야 한다) 공유하는 글자는 A와 B에 동시에 포함되어 있는 글자여야 하고, 그런 글자가 여럿인 경우 A에서 제일 먼저 등장하는 글자를 선택한다. 마찬가지로 이 글자가 B에서도 여러 번 등장하면 B에서 제일 처음 나오는 것을 선택한다. 예를 들어, A = "ABBA"이고, B = "CCBB"라면, 아래와 같이 만들 수 있다.
<입력>
첫째 줄에 두 단어 A와 B가 주어진다. 두 단어는 30글자 이내이고, 공백으로 구분되어져 있다. 또, 대문자로만 이루어져 있고, 적어도 한 글자는 두 단어에 포함되어 있다.
BANANA PIDZAMA
<출력>
A의 길이를 N, B의 길이를 M이라고 했을 때, 출력은 총 M줄이고, 각 줄에는 N개 문자가 있어야 한다. 문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 '.'로 출력한다.
.P....
.I....
.D....
.Z....
BANANA
.M....
.A....
<나의 코드>
A, B = input().split()
N, M = len(A), len(B)
for i in range(N):
if A[i] in B:
idx = i
w = B.index(A[i])
break
for j in range(M):
if j == w:
print(A)
else:
print('.' * idx + B[j] + '.' * (N-idx-1))
<REVIEW>
처음에 이 문제는 for문을 2번 돌리다가 도저히 중첩 for문을 빠져나오는 방법을 몰라 다시 생각해낸 방법이다. 이 문제는 index값이 중요하다고 생각한다. 특히 for문을 두 번 돌릴 때, 두 단어가 첫번째로 겹쳐지는 index값을 받지못하고 항상 마지막에 겹쳐지는 idx값을 받아와 for문이 2번 중첩될 때 어떻게 첫번째 겹쳐지는 글자의 index값을 받아오는 지 아직도 알수는 없지만, if - in -: 을 쓰면 내가 원하는 첫번째 index값을 받아올 수 있다는 것을 새롭게 알게되었다.
출력을 할 때도, 겹쳐지는 글자의 idx값을 알게되니깐, 훨씬 구현하기 쉬웠다.
<출처>
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/Python] 10818. 최소, 최대 (0) | 2021.10.25 |
---|---|
[BOJ/Python] 2562. 최댓값 (0) | 2021.10.25 |
[BOJ/Python] 8979. 올림픽 (0) | 2021.09.14 |
[BOJ/Python]1159. 농구 경기 (0) | 2021.09.14 |
[BOJ/Python]2847. 게임을 만든 동준이 (0) | 2021.09.10 |