알고리즘/알고리즘_swea

[Python][SWEA] 4751. 다솔이의 다이아몬드 장식 D3

Jerry_K 2024. 5. 15. 21:46
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


🗒️ 파이썬 코드 풀이

T = int(input())
for tc in range(1,T+1):
    dasol = list(input())
    lst = [["."] * 5 for _ in range(5)]

    # 다이아 몬드 형태로 바꿔주기
    shap = [(0,2),(1,1),(1,3),(2,0),(2,4),(3,1),(3,3),(4,2)]
    for i,j in shap:
        lst[i][j] = "#"
    chaged_lst = [lst[i].copy() for i in range(5)] # 얕은 복사

    # 기존 리스트 변형 (맨 뒤 요소 pop)
    for i in range(5):
        chaged_lst[i].pop()
        chaged_lst[i] = chaged_lst[i] * (len(dasol)-1)
        chaged_lst[i] += lst[i] # 마지막에는 기존 리스트 붙히기

    # 문자열 규칙에 따라 넣기 (2,2)-(2,6),(2,10)...
    for i in range(len(dasol)):
        chaged_lst[2][2+4*i] = dasol[i]

    # 문자열 출력
    for i in range(len(chaged_lst)):
        print(''.join(chaged_lst[i]))

 

1. 먼저 가장 기본 틀을 "."로 만들어준다. 

 

2. 다이아몬드 형태를 맞춰주기 위해, 튜플 형태를 리스트로 묶어주고, 반복문으로 "#"을 넣어준다.

 

3.  lst를 얕은 복사를 하여 chaged_lst에 넣어준다. 2차원이기 때문에 for문으로 얕은 복사를 해준다.

(이렇게 하지 않으면 chaged_lst의 값이 변할 때 lst 값도 바뀐다.)

 

4. 문자열이 들어가는 규칙은 (2,2),(2,6) ... 이런 순서이다. 문자열 크기만큼 규칙을 적용시켜준다.

 

📌 주의사항

chaged_lst에 lst값을 할당하니 얕은 복사를 생각 하긴 했다.

근데 결과물을 보니 chaged_lst의 내부 리스트 값이 변할 때 lst도 같이 변하는 것을 발견했다.

혹시나 하는 마음으로 lst  내부의 리스트들에 각각 copy를 해주었는데, 잘 출력이 된 것을 확인했다.

2차원 copy를 할 떄는 내부 리스트들에도 copy를 해주자

🧐 문제 코멘트

문제가 어렵거나 하지는 않다.  각 문장을 나눠서, 노가다 형식으로 풀어도 문제는 없다.

다만, 최대한 규칙성을 찾아서 코드 작성을 해보려고 했다.


📚 문제


삼성시에 있는 5,000개의 버스 정류장은 관리의 편의를 위해 1에서 5,000까지 번호가 붙어 있다.

그리고 버스 노선은 N개가 있는데, i번째 버스 노선은 번호가 Ai이상이고,

Bi이하인 모든 정류장만을 다니는 버스 노선이다.

P개의 버스 정류장에 대해 각 정류장에 몇 개의 버스 노선이 다니는지 구하는 프로그램을 작성하라.


[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N ( 1 ≤ N ≤ 500 )이 주어진다.

다음 N개의 줄의 i번째 줄에는 두 정수 Ai, Bi ( 1 ≤ Ai ≤ Bi ≤ 5,000 )가 공백 하나로 구분되어 주어진다.

다음 줄에는 하나의 정수 P ( 1 ≤ P ≤ 500 )가 주어진다.

다음 P개의 줄의 j번째 줄에는 하나의 정수 Cj ( 1 ≤ Cj ≤ 5,000 ) 가 주어진다.


[출력]

각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고 한 칸을 띄운 후,

한 줄에 P개의 정수를 공백 하나로 구분하여 출력한다.

j번째 정수는 Cj번 버스 정류장을 지나는 버스 노선의 개수여야 한다.