본문 바로가기
알고리즘/백준

문자열(11654, 11720, 10809, 2675, 1157)

by 수쨔앙 2022. 9. 10.

11654

문제 알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
입력 알파벳 소문자, 대문자, 숫자 0-9 중 하나가 첫째 줄에 주어진다.
출력 입력으로 주어진 글자의 아스키 코드 값을 출력한다.
asc = input()
print(ord(asc))

아스키코드를 구하는 함수가 있었던것 같아서 구글링을 해봤다!

역시나 있구만..!!!

ord() 함수가 바로 그것!!

 

chr() 함수는 그 반대를 계산해준다!

아스키코드에 해당하는 숫자를 입력하면 그 문자열을 출력한다!

ex) ord(0) = 48, chr(4) = 0

 

 

 

 

11720

문제 N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
출력 입력으로 주어진 숫자 N개의 합을 출력한다.
n = int(input())

a = input()
sum = 0
for i in a:
    sum += int(i)

print(sum)

참 이상하다.... 맞겠지!! 하면 틀리고

이게 맞나? 하면 맞고...ㅋㅋㅋㅋㅋㅋㅋ 이런 매력덩어리 백준자식...

 

a는 문자다 input()은 문자를 받아오는데 나는 input()에 int()를 안씌워 줬으니까!

for 로 돌리려면 int 이면 못돌리니까 str으로 뒀다!!

예전에 a[i]로 돌리다가 에러가 났었는데...ㅎㅎ 발전한 나의모습^^

 

sum += i 로 했다가 i가 str이라서 

혹시 i에다가 int를 씌워주면 되려나 해서 했더니

너무나 잘되더라... 아싸뵤^^

 

 

 

10809

문제 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
s = input()
alp = list(range(97,123))  # 아스키코드 숫자 범위

for x in alp :
    print(s.find(chr(x)))

뭔가 내가 모르는 함수가 사용될 것 같은 강한 느낌을 받아서 구글링을 해봤다

아니나 다를까 나는 find()를 첨봤다!!!

 

find()를 알아보자면 말그대로 찾는 함수인데

find() 와 index()는 비슷한데 다르다고한다

 

공통적인 부분으로는 먼저

변수.find(찾을문자) / 변수.index(찾을문자)로 사용하고, 찾을 문자가 처음 위치한 자리의 값을 찾을 수 있다.

시작점과 종료점을 지정할 수 있다.

 

차이점으로는

find()는 찾는 문자가 없으면 -1을 출력하고, 변수는 문자열만 가능하다.

리스트, 튜플, 딕셔너리자료형은 find 사용할 수 없다. 사용하면 attributeerror 발생!

index()는 찾는 문자가 없으면 valueerror 발생!

문자열, 리스트, 튜플 자료형에서 가능하고 딕셔너리자료형에서는 사용할 수 없다.

 

이러하니 이번 문제에서는 find를 사용했어야한다!

 

 

먼저 s로 input() 값을 받아오고 alp로 영어 소문자 아스키코드값의 범위를 가져오자

왜냐면 chr()로 바꿔서 맞는지 확인할거니까~!

 

for 문으로 돌리는데 

s안에 x값이 있는지 하나하나 돌려서 없으면 -1을 찍고 있으면 그 위치를 찍어주는거다!!

 

 

 

 

2675

문제 문자열 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를 출력한다.
t = int(input())
for j in range(t):
    r, s = input().split()
    s = str(s).upper()
    r = int(r)
    for i in s:
        print(i*r,end='')
    print()

 

t = int(input())
for j in range(t):
    r, s = input().split()
    s = str(s).upper()
    r = int(r)
    for i in s:
        print(i*r,end='')

먼저 이렇게 적었었다!

근데 처음은 잘되는데 다음이 에러가 뜬다...!!!!!

ValueError: not enough values to unpack (expected 2, got 0)

이 오류는 unpack하기에 값이 부족하다는 뜻이다

packing : 여러개의 객체를 하나의 객체로 합쳐준다

unpacking : 여러 개의 객체를 포함하고있는 하나의 객체를 풀어준다

 

결국 변수와 값의 개수가 맞지 않아서 나는 에러라고 한다.

 

아니 근데 r, s = input().split() 이건 여러개로 받아 줬잖아요ㅠㅜㅜ

왜때문이야 파이썬 정답을 알려줘ㅜㅜㅠㅜㅜㅜㅜ

 

 

내가 알려주지

그것은 바로 개행을 안했기 때문....!!!

이것저것 시도해본 결과닷!!!!!

t = int(input())
for j in range(t):
    r, s = input().split()
    s = str(s).upper()
    r = int(r)
    for i in s:
        print(i*r,end='')
    print()

그래서 자세한 이유는 사실 잘 모르겠다..

내일 튜터님한테 여쭤봐야지!!!!!했는데

팀장님한테 여쭤보고 해결ㅎ.ㅎ

저 print()를 안해주면 결과 뜨고 밑에줄에서 입력값을 받는게 아니고

바로 옆에서 입력값을 받아야해서

print()가 있어야 했던것!!! 

 

 

 

 

1157

문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
 

count()함수를 사용해보자!

문자열.count(찾을문자)

count()함수는 대소문자를 구분해서 문자열 안에 찾을 문자가 몇개인지 찾아주는 것이다!

 

문자열을 중복값을 제외하고 리스트에 담아주고 for 로 돌려줘서

문자별로 개수를 세어주고 빈 리스트에 넣어준다음

max 개수가 1개 이상이면 ? 찍고

아니면 index로 max 위치를 잡고, 문자를 찾아준다!

 

대문자로 출력을 받아야하니 아예 처음부터 input()값을 대문자로 받아주자!

word = input().upper()

 

그리고 새로운 리스트를 만들어주는데 찾을문자를 돌려주기 위함이니까

중복되는 값이 없도록 set으로 묶어주자.

set_word = list(set(word))

 

set_word에는 word에 중복값 제외한 문자들이 담겨있는데 

이걸 for로 돌려주면서 word에 그 문자들이 몇개씩 있는지 

빈 리스트를 만들어서 담아준다

ctn = []

for i in set_word:
    num = word.count(i)
    ctn.append(num)

 

그리고 ctn의 최대값을 구해서 그 값이 ctn에 몇개가 있는지 확인하자

1개보다 크면 ?를 찍어주자

if ctn.count(max(ctn))>1: 
    print("?")

 

최대값이 1개라면 ctn에서 최대값의 index 위치를 잡자.

ctn에서 최대값의 위치와

set_word에서 최대값의 위치가 같을테니

set_word에서 ctn에서 찾은 최대값의 index를 주고 찾으면 문자가 나오겠지!!!!!

else:
    max_index = ctn.index(max(ctn))
    print(set_word[max_index])

이러케~~!!!~~~~~~!!~!~!~!~

 

쏘리질러~~!!~~~~!~!~!!~!~!!~~!~~!!~!

728x90

댓글