# 2920. 음계
백준
의 브론즈2
티어 문제들이다.
📖Probelm
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, …, C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
예제 1
1
2
1 2 3 4 5 6 7 8
ascending
예제 2
1
2
8 7 6 5 4 3 2 1
descending
예제 3
1
2
8 1 7 2 6 3 5 4
mixed
🔍Solve
- 문자열을 입력받는다.
- 주어진 조건은 3가지다. ascending, descending, mixed!
- ascending : 입력받은 문자열과 문자열을 오름차순으로 정렬한 것이 같은지 비교한다.
- descending : 입력받은 문자열과 그 문자열을 내림차순으로 정렬한 것이 같은지 비교한다.
- mixed : 위의 2가지의 경우가 아닐 경우, mixed를 출력한다.
1
2
3
4
5
6
7
8
num = list(map(int, input().split()))
if num == sorted(num):
print("ascending")
elif num == sorted(num, reverse=True):
print("descending")
else:
print("mixed")
- 이 문제를 통해 새롭게 알게 된 것은 내림차순으로 정렬하는 것이다.
sorted(list_name, reverse=True)
: 내림차순으로 정렬- 시간 복잡도 : $O(1)$
- 공간 복잡도 : $O(1)$
#2675. 문자열 반복
📖Probelm
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code “alphanumeric” 문자만 들어있다.
QR Code “alphanumeric” 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./:
이다.
입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.
출력
각 테스트 케이스에 대해 P를 출력한다.
예제 입력 1
1
2
3
2
3 ABC
5 /HTP
예제 출력 1
1
2
AAABBBCCC
/////HHHHHTTTTTPPPPP
🔍Solve
testcase
를 입력받는다.- 반복할 횟수를 나타내는
r
과 문자열을 나타내는s
를 공백을 구분으로 입력받는다. s
는 for문을 돌면서 각i
를 입력 받은r
만큼 반복한다.
1
2
3
4
5
6
7
testcase = int(input())
for _ in range(testcase):
r, s = input().split() # r: 반복횟수, s : 문자열
text = ""
for i in s:
text += int(r) * i
print(text)
- 처음엔 R을 기준으로 for문을 반복했는데 오류가 났다. 그래서 확실한 방법인 int형을 더하는 식으로 했다.
- 시간 복잡도 : $O(n^2)$
- 공간 복잡도 : $O(1)$