728x90

4/ 18 파이썬 공부
1. 백준 10809
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 
공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 
단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

s = input()
for i in range(97, 123):
    if chr(i) in s:
        for j in range(len(s)):
            if chr(i) == s[j]:
                print(j, end = ' ')
                break
    else:
        print(-1)

- 코드 구조
s 입력받기
아스키 코드로 소문자 하나씩 대입
소문자가 문자열에 존재하면,
문자열 길이 만큼 반복하며 문자 하나씩 대조
처음 등장하는 위치 출력 후 break
소문자가 문자열에 존재하지 않으면,
-1 출력 후 다음 소문자 대조 시작
 
1) 아스키 코드 반환하기
-ord('문자')
>>> 문자열에 해당하는 아스키 코드(숫자) 반환

-chr('아스키 코드')
>>> 아스키 코드(숫자)에 해당하는 문자열 반환

<<대표적인 아스키 코드>>
알파벳 대문자 A ~ Z: 65 ~ 90 
알파벳 소문자 a ~ z: 97 ~ 122

2. 백준 2675
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 
각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. 
S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 
각 테스트 케이스에 대해 P를 출력한다.

t = int(input())
for i in range(t):
    r, s = input().split()
    r = int(r)
    for j in range(len(s)):
        for k in range(r):
            print(s[j], end='')
    print()

- 코드 구성
테스트 케이스 수 t 입력받기
테스트 케이스 만큼 반복하며
r, s 공백 기준으로 입력받기
r 정수형식으로 변경하기
r 횟수만큼 s의 요소들 반복 출력하고, 다음문자 공백없이 출력하기
마지막에 한번 줄바꿈한번 하기

1) a, b = input().split()
a, b 변수에 공백기준으로 문자열 입력받기

2) print() 함수의 성질
print 함수가 한번 들어오면 기본적으로 한번의 '\n'(줄바꿈)이 포함되어 있다

3. 백준 2908
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 
두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 
예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 
따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
첫째 줄에 상수의 대답을 출력한다.

a, b = input().split()
a = int(''.join(reversed(a)))
b = int(''.join(reversed(b)))
if a > b:
    print(a)
else:
    print(b)

-코드 구조
a, b 문자열 입력받기
문자열은 리스트 형태로 변경 가능하므로
reversed() 함수로 숫자의 순서를 역순으로 바꾼 후
다시 ''.join() 함수로 합친후 숫자로 변경
숫자 비교 후 출력

1) a.reverse()와 reversed(a):
둘다 리스트의 순서를 역순으로 바꾸어준다

다만
a.reverse()는 a 리스트의 순서를 역순으로 바꾼 것으로 값을 반환하지 않고 다른 변수에 저장이 불가능하다. 
reversed(a)는 a 리스트의 순서를 역순으로 바꾼 새로운 리스트를 반환한다.

2)'구분자'.join(리스트):
리스트의 내용을 구분자를 기준으로 합쳐준다.

ex)
a = [1, 2, 3]
a1 = ''.join(a)
a2 = ','.join(a)

print(a)
>>>[1, 2, 3]
print(a1)
>>>123
print(a2)
>>>1,2,3

4. 백준 11718
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 
또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.
입력받은 그대로 출력한다.

while True:
    try:
        print(input())
    except:
        break

-코드 구조
단순한 오류 처리 함수
일단 가능할 때까지 입력과 출력을 반복해주는 대신
입력을 멈추면 생기는 오류대신 코드를 멈춤

1) 오류 처리
try:
    실행할 코드
except:
    예외가 발생했을 때 처리하는 코드

5. 백준 5622
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
숫자 1을 걸려면 총 2초가 필요하다. 
1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 
즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.

1번 코드

s = input()
a =[]
for i in range(len(s)):
    if ord(s[i]) <68:
        a.append(3)
    elif ord(s[i]) <71:
        a.append(4)
    elif ord(s[i]) <74:
        a.append(5)
    elif ord(s[i]) <77:
        a.append(6)
    elif ord(s[i]) <80:
        a.append(7)
    elif ord(s[i]) <84:
        a.append(8)
    elif ord(s[i]) <87:
        a.append(9)
    elif ord(s[i]) <91:
        a.append(10)
print(sum(a))

- 코드 설명
문자열을 입력 받은 후
아스키 코드로 구간을 나누어,
새로운 리스트에 각 문자마다 걸리는 시간 저장
리스트의 모든 요소 sum()으로 더해 소요시간 반환

1)아스키 코드 반환하기
-ord('문자')
>>> 문자열에 해당하는 아스키 코드(숫자) 반환

-chr('아스키 코드')
>>> 아스키 코드(숫자)에 해당하는 문자열 반환

<<대표적인 아스키 코드>>
알파벳 대문자 A ~ Z: 65 ~ 90 
알파벳 소문자 a ~ z: 97 ~ 122

2번 코드

s = input()
a = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
n = 0
for i in range(len(s)):
    for j in a:
        if s[i] in j:
            n += a.index(j)+3
print(n)

-코드 구조
문자열을 입력 받은 후
각 숫자를 의미하는 문자열을 구분해 놓은 기준리스트 생성
문자열의 길이만큼 반복하며,
각 문자의 요소들이 기준 리스트의 몇번째 index에 포함되는지에 따라 구분하고,
그에 따라 걸리는 소요시간을 더한다
소요시간 출력

1) 리스트.index(요소):
리스트에서 특정 요소의 첫번째로 등장하는 순서(index)가 몇번 인지 반환

728x90

+ Recent posts