Baekjoon - 문자열

do yeon kim·2022년 6월 10일
0
11654번 아스키 코드
word = input()
print(ord(word))

아스크 코드로 변환
ord() 문자를 아스키코드로 변환 ord(a) => 97
chr() 숫자를 아스키코드로 변환 chr(65) => A

input으로 입력 받는 값은 문자열이다.
문자열을 아스키 코드로 바꾸는 방법 ord(해당문자)


11720번 숫자의 합
방법1
count = int(input())

numbers = input()

result = []
for i in range(count):
    result.append(numbers[i])

a = [int(i) for i in result]

print(sum(a))



방법2
count = int(input())
while True:
    numbers = input()
    if numbers.index(numbers[-1]) == count-1 :
        
        result = []
        sum = 0
        for number in numbers:
            sum = sum + int(number)

        print(sum)    
        break

    else:
        pass

방법2는 방법1에 대한 방어코드를 추가한 것으로 방법1의 경우 처음 입력하는 숫자가 3인 경우 두번째 입력하는 문자가 3이상이 되도 문제가 없다.

그래서 numbers.index(numbers[-1]) == count-1 코드를 추가해 주었다.
의미는 두번째로 입력받은 문자열의 마지막요소의 인덱스가 입력받은 수의 총 길이를 의미하는 count에서 인덱스 이므로 -1해준값과 같다는 조건이 참이 되면 그 뒤로 수행하게 했다.


10809번 알파벳 찾기
방법1
text = input()
for i in list(map(chr,(range(97,123)))):
   print(text.find(i))
 
방법2
text = input()
for i in list(map(chr,(range(97,123)))):
    if i in text:
        print(text.index(i), end=" ")
    else:
        print(-1, end=" ")

방법1
find()함수를 이용하면 존재하지 않으면 -1을 반환한다.
그 점을 이용해서 하나씩 돌면서 있는지 없는지 확인 하는 코드를 구현

방법2
a의 아스키코드는 97 z는 123이다. 이를 이용해서 range객체map을 이용해서 a-z까지의 리스트를 만들고, 사용자로부터 입력받은 text가 a-z까지의 안에 있으면 문자열.index로 인덱스 값을 반환 받았고, 아니면 -1을 출력하는 식으로 했다.


2675번 문자열 반복
cases = int(input())
for case in range(cases):
    a = input().split()
    #a[0] 반복획수
    #a[1] 반복문자열
    
    temp = []
    for i in range(len(a[1])):
        temp.append(a[1][i]*int(a[0]))
    
    
    temp = "".join(temp)
    print(temp)

join함수를 이용해서 반복횟수만큼 각자리를 반복한 문자열의 리스트를 합쳤다.


1157번 단어 공부

texts = input() 			#사용자로부터 입력받는다
texts = texts.upper()		#대문자로 모두 바꾸어 준다.
lst = list(set(texts))		#중복을 제거 하기 위해서 set으로 변경 후 다시 리스트로 만든다.
lst.sort()					#문자들을 정렬해준다.
word_list = []
temp = 0					#최대값을 0으로 설정해준다.
for word in lst:			#중복이 없으므로 문자 하나씩 돌며 문장안에 있는 갯수를 cnt변수에 받는다.
    cnt = texts.count(word)	
    
    if temp == cnt:			#만약 cnt값과 미리 설정한 temp값이 같다면 문제대로 ?를 출력한다.
        word_list.append("?")

    if cnt> temp:			#cnt가 temp보다 크다면 미리만들어둔 word_list에 문자를 추가한다.
        temp = cnt
        word_list.append(word)

print(word_list[-1])		#모든 문자를 돌기 때문에 맨 마지막에 들어온 문자가 cnt가 가장 큰 문자가 된다.
							#그러므로 마지막 문자를 출력해 주면 , 문제의 답을 충족시킬수 있다.

1152번 단어의 개수

texts = input().split()
print(len(texts))  

split()split(" ")은 다르다.
split() 공백을 포함하지 않는다.
split(" ") 띄어쓰기를 여러번 하면, 공백문자로 본다.


2908번 상수
방법1
number = input().split()			#사용자로 부터 두개의 숫자를 입력받는다.
									#사용자로 부터 입력받는 값은 str이 기본이다.

def reverse_number(number):			#함수정의 문자형태의 숫자를 받으며 거꾸로 바꾸어준다.
    result = []
    for i in range(len(number)):
        result.append(number[len(number)-i-1])	#뒤에서 부터 추가해준다.

    result = "".join(result)		#join으로 리스트 내의 요소들을 합친다.
    return result

num1 = reverse_number(number[0])
num2 = reverse_number(number[1])

if int(num1)>int(num2):
    print(num1)
else:
    print(num2)



방법2
A,B = input().split(' ')
A = [n for n in A]
B = [n for n in B]
A.reverse()
B.reverse()
a = int(''.join(A))
b = int(''.join(B))
print(max(a,b))

reverse() 함수가 있다. 리스트 내의 요소들을 반대로 바꾸어 준다.


5622번 다이얼
words = list(input())
count = 0
for word in words:
    
    if word in ["A","B","C"]:
        count += 3
    elif word in ["D","E","F"]:
        count += 4
    elif word in ["G","H","I"]:
        count += 5
    elif word in ["J","K","L"]:
        count += 6
    elif word in ["M","N","O"]:
        count += 7
    elif word in ["P","Q","R","S"]:
        count += 8
    elif word in ["T","U","V"]:
        count += 9
    elif word in ["W","X","Y","Z"]:
        count += 10

print(count)

words = list(input())
print(words)
asdsad 입력시
['a', 's', 'd', 's', 'a', 'd']


2941번 크로아티아 알파벳
texts = input()
lit = ["c=","c-","dz=","d-","lj","nj","s=","z="]

for i in range(len(lit)):
    if lit[i] in texts:
        texts= texts.replace(lit[i],"*")     
    texts = texts.replace(",","")

print(len(texts))


1316번 그룹 단어 체커

def find_index(texts, word): # 
    idx_list =[]
    for _ in range(len(texts)):
        idx = texts.find(word)
        texts = texts.replace(word,"",1)
        if idx>=0:
            idx_list.append(idx)

    return idx_list


number = int(input())               # 사용자로 부터 입력 받음
total_count=0                       # 입력 받은 문자 중 그룹단어 수 
for i in range(number):             # 처음 입력 받은 수 만큼 반복 
    texts = input()                     

    set_texts = list(set(texts))    # 입력 받은 단어의 중복 제거를 위해서 set으로 만들고 다시 list로 변환
    

    count = 0       
    for i in range(len(set_texts)):                 # 중복아 제거된 단어의 문자열리스트의 수 만큼 반복
        idx_list = find_index(texts, set_texts[i])      # find_index()를 이용해서  set_texts의 요소들을 하나씩 인자로 주고
                                                        # idx_list를 반환받는다.        
        if len(set(idx_list)) == 1:                 # idx_list를 set()으로 변환해서 중복을 제거 그리고 중복을 제거한 길이가 1이면 count에 추가
            count = count + 1

    if count == len(set_texts):                     # count와 set_text의 길이가 같다면 total_count를 추가
        total_count = total_count +1
    
print(total_count)


0개의 댓글