728x90
반응형

문제:

영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.

어떤 글이 주어졌을 때, 가장 많이 나온 글자를 프로그램을 작성하시오.

 

입력:

첫째 줄부터 글의 문장이 주어진다. 글은 최대 5000글자로 구성되어 있고, 공백, 알파벳 소문자, 엔터로만 이루어져 있다 그리고 적어도 하나의 알파벳이 있다.

 

출력:

첫째 줄에 가장 많이 나온 문자를 출력한다. 여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.

 

풀이방법:

 알파벳의 개수를 세는 크기가 26인 배열을 만들어서 해당하는 알파벳을 만날 때마다 해당하는 인덱스에 +1을 하도록 한다.( 예를 들면 a를 만나면 인덱스 0의 값을 +1한다.) 이렇게 모든 글을 탐색하고 난 뒤에 알파벳 배열의 max값과 일치하는 값들을 출력하도록 하게 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
alpha=[0]*26
 
for line in sys.stdin:
    for s in line:
        if s==' ':
            continue
        elif s=='\n':
            continue
        idx=ord(s)-97
        alpha[idx]+=1
 
ans=max(alpha)
for i in range(len(alpha)):
    if alpha[i]==ans:
        print(chr(i+97),end='')
cs

문제링크:

https://www.acmicpc.net/problem/1371

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ]1744. 수 묶기  (0) 2019.09.16
[BOJ]14501. 퇴사  (0) 2019.09.11
[BOJ]9933. 민균이의 비밀번호  (0) 2019.09.09
[BOJ]2178. 미로찾기  (0) 2019.09.08
[BOJ]2667. 단지번호붙이기  (0) 2019.09.07
728x90
반응형

문제:

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

 크로아티아 알파벳

변경 

 č

 c=

 ć

 c-

 dž

 dz=

 đ

 d-

 lj

 lj

 nj

 nj

 š

 s=

 ž

 z=


예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력:

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-' , '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력:

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

풀이 방법:

일단 크로아티아 알파벳을 리스트로 만들고 난 뒤 갯수를 세주고 난 뒤 이 값들을 ' '공백으로 바꾸어 준다. 바로 ''로 바꾸지 않은 이유는 nljj 와 같이 lj가 사라진 다음에 nj가 크로아티아 알파벳가 인식이 되기 때문이다. 그래서 공백으로 바꾸고 난 뒤에 마지막에 다시 ''로 바꿔서 특수한 알파벳이 아닌 알파벳들의 갯수를 센다.

1
2
3
4
5
6
7
8
9
10
11
12
def croatia(s):
    lis=['c=','c-','dz=','d-','lj','nj','s=','z=']
    answer = 0
    for i in lis:
        a = s.count(i)
        answer+=a
        s=s.replace(i,' ')
    s=s.replace(' ','')
    answer+=len(s)
    return answer
s=input()
print(croatia(s))
cs


728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ]10250. ACM 호텔  (0) 2019.04.08
[BOJ]2292. 벌집  (0) 2019.04.07
[BOJ]1157. 단어 공부  (0) 2019.04.05
[BOJ]1152. 단어의 개수  (0) 2019.04.04
[BOJ]1065. 한수  (0) 2019.04.03
728x90
반응형

문제:

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

입력:

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력:

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

풀이 방법:

우선 갯수를 세는 것을 편리하기 위해 전부 소문자로 변경한 후 set을 통해 unique한 값들을 구한다. 이를 반복문으로 탐색하며 갯수를 센 리스트를 만든다. 이후 여기서 max값이 두개 이상이면 ?를 출력하고 한개면 인덱스 값을 통해 값을 구하고 upper함수로 대문자로 만들어 준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
def number(s):
    s=s.lower()
    un=[]
    string= list(set(s))
    for i in string:
        a=s.count(i)
        un.append(a)
    if un.count(max(un)) !=1:
        return '?'
    else:
        return string[un.index(max(un))].upper()
s=input()
print(number(s))
cs


728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ]2292. 벌집  (0) 2019.04.07
[BOJ]2941. 크로아티아 알파벳  (0) 2019.04.06
[BOJ]1152. 단어의 개수  (0) 2019.04.04
[BOJ]1065. 한수  (0) 2019.04.03
[BOJ]1110. 더하기 사이클  (0) 2019.04.02
728x90
반응형

문제:

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.


입력:

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

출력:

첫째 줄에 단어의 개수를 출력한다.

풀이 방법:

다른 언어로 하면 어려운 것일지 잘 모르겠지만 적어도 파이썬으로는 쉽게 풀 수 있다. 파이썬은 input으로 띄어쓰기를 포함한 한 줄을 전체로 string으로 받으며 이를 split()을 사용하면 공백을 기준으로 나누어 리스토로 반환을 해준다. split()안에 변수 값을 넣어주면 그 값으로 분할을 해주지만 default값으로는 공백으로 설정되어 있다. 따라서 input().split()으로 받은 것의 길이를 세어주면 답이다.

1
2
3
n=input()
EmptyList=n.split()
print(len(EmptyList))
cs


728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ]2941. 크로아티아 알파벳  (0) 2019.04.06
[BOJ]1157. 단어 공부  (0) 2019.04.05
[BOJ]1065. 한수  (0) 2019.04.03
[BOJ]1110. 더하기 사이클  (0) 2019.04.02
[BOJ]4344. 평균은 넘겠지  (0) 2019.04.01

+ Recent posts