본문 바로가기

python code

문자열 문제

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

S = input().lower()
L = []
for i in range(97, 97+26):
    L.append(S.count(chr(i)))#a갯수, b갯수, c갯수..., z갯수

A = max(L) #각 알파벳 갯수중에 최댓값

if L.count(A) >= 2: #해당 최댓값이 중복인 경우
    print("?")
else:
    print(chr(L.index(A) + 97).upper())

www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 �

www.acmicpc.net

numbers = input().split()
number1 = int(''.join(reversed(numbers[0])))
number2 = int(''.join(reversed(numbers[1])))
print(max(number1, number2))
print(max([int(i[::-1]) for i in input().split()]))

처음에는 reversed함수를 이용해서 뒤집고, join으로 붙이고 int로 변환했다.

다른 답변들을 보니 한줄로 만들어버렸길래 올려본다.

문자열 받은 것을 뒤집고, int로 변경 후 바로 [] 안에 넣어 배열로 만들어 버렸다. ㅇㅁㅇ

 

www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

cro_c = ["c=","c-","dz=","d-","lj","nj","s=","z="]
s = input()

for c in cro_c:
    s = s.replace(c, "*")

print(len(s))

처음에는 for문으로 문자열 하나씩 보면서 크로아티아 치환문자가 발견되면 pop으로 빼고 남은 것들의 len을 더해야겠다고 생각했다. 그런데 다른 코드들 검색해보니 발견되면 아에 *로 치환해서 빼고 나중에 한번에 len을 계산하는게 보편적이고 더 효율적인 방법인 것 같다.

www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때�

www.acmicpc.net

처음에는 문제를 이해하지 못해서 Happy new year는 그룹단어가 총 5개인데 왜 3개인가 의문이었다.

이 문제는 Happy, New, year 라는 입력들이 왔을 때 그룹단어인 입력이 몇개인가이다. 따라서 답은 0~3개일 것이고, 모두 그룹단어가 아닌 문자가 없으므로 답이 3인 것이다.

def check_group(word) :
    c_list = []   
    for i, c in enumerate(word) : 
        if c not in c_list : 
            c_list.append(c)
        else :#이미 전에 언급된 문자에 대해
            if (i!= 0) & (word[i] != word[i-1]) :
                return 0
    return 1

n = int(input())
s = []

for _ in range(n) : 
    s.append(input())

cnt = 0 
for w in s :
    cnt += check_group(w)
    
print(cnt)

처음 생각한 방법은 문자를 하나씩 가져오면서 그룹인지 아닌지 판별하는 방식이다.

result = 0
for i in range(int(input())):
    word = input()
    #print("#", sorted(word, key=word.find))
    if list(word) == sorted(word, key=word.find):
        result += 1
print(result)

위 코드는 다른사람들의 코드를 보고 배운 방식이다.

받아온 word를 순서대로 정리해서 원래 문자와 동일하면 그룹문자로 취급하는 것이다.

예를 들어 Happya라고 입력하여 위처럼 정렬하면 [H우선 정렬-a우선정렬-p우선정렬-y우선정렬..]순으로 되어

Haappy가 되고 이는 원래 문자인 Happya와 다르므로 그룹문자가 아닌 것을 알 수 있다.

'python code' 카테고리의 다른 글

너비우선탐색문제  (0) 2020.09.11
The gift(그리디 알고리즘)  (0) 2020.09.10
Chuck Norris 문제풀이  (0) 2020.09.09