문제:

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력:

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1<=M,N<=1,000,000)

출력:

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

풀이 방법:

임의의 수 n이 소수인지 판별하기 위해서 n-1까지 다 나눠보는 것이 아니라 sqrt(n) 값까지 나눠서 나누어지지 않는다면 소수임을 알 수 있다는 것은 대부분 알고 있다. 하지만 1,000,000개의 수에 대해서 다 해보는 것은 아무리 sqrt(n) 값까지 나눠본다고 해도 많은 시간이 소요된다. 따라서 이렇게 큰 수가 소수인지 판별하기 위해서 사용되는 것이 에라토스테네스의 체이다.


 이 방법은 예를 들어 120이하의 소수들을 파악하기 위해서 120까지의 배열을 생성한 뒤에 우선 2가 소수인지 판별을 한다. 2는 소수인것이 자명하므로 2의 배수의 값을 0으로 바꾼다.(4,6,8,10,12,14,......) 다 바꾸고 난 뒤에 3도 소수이므로(쉽게 판별할 수 있다.) 3의 배수의 값들을 0으로 바꾼다.(6,9,12,15,.....)이후 원래 4의 값으로 이동을 했지만 이미 2의 배수의 경우일 때 0으로 바뀌어 있다. 0이면 어떤 소수의 배수임을 의미하므로 그냥 지나가게 설정을 한다. 이렇게 계속 0이 아닌 수를 만나면 소수인지 판별을 하고 0을 만나면 그냥 지나가도록 한다. 그러면 최종적으론 이 배열엔 소수와 0만 남아있는 배열이 된다.

그러면 set을 통해서 중복된 0의 값들을 다 제거하고 재정렬한뒤 0의 값을 빼준다면 소수만 남아있는 리스트가 된다. 따라서 이 문제도 에라토스테네스의 체 방법을 이용해서 풀면 시간초과가 발생하지 않고 풀 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import math
def prime(n):
    is_prime=True
    if n==1:
        is_prime=False
    for i in range(2,int(math.sqrt(n))+1):
        if n%i==0:
            is_prime=False
    return is_prime
a,b=input().split()
a=int(a)
b=int(b)
h=list(range(1,b+1))
h[0]=0
for i in range(len(h)):
    if h[i]==0:
        pass
    elif prime(h[i]):
        for j in range(i+h[i],len(h),h[i]):
            h[j]=0
h=sorted(list(set(h[a-1:])))
h.remove(0)
for i in h:
    print(i)
cs


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

[BOJ]10828. 스택  (0) 2019.04.15
[BOJ]4948.베르트랑 공준  (0) 2019.04.14
[BOJ]1181. 단어정렬  (0) 2019.04.12
[BOJ]6064. 카잉 달력  (0) 2019.04.11
[BOJ]1475. 방번호  (0) 2019.04.10

문제:

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

1. 길이가 짧은 것부터
2. 길이가 같으면 사전 순으로

입력:

첫째 줄에 단어의 개수 N이 주어진다. (1<=N<=20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

출력:

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

풀이 방법:

단어를 정렬하는 기준이 두가지 이다. 그래서 처음 리스트에 담을 때 단어와 단어의 길이를 함께 담아주도록 한다. 이후 단어를 정렬을 할 때 sorted의 key 파라미터를 이용하도록 한다. lambda l : (l[1],l[0]) 과 같이 key 값을 주었는데 이 말은 l[1]은 단어의 길이를 기준으로 우선 정렬을 하고, 만약 같다면 l[0] 단어를 기준으로 즉 사전 순으로 배열하도록 한다.


1
2
3
4
5
6
7
8
9
10
11
def dictionary(n):
    l=[]
    for i in range(n):
        s=input()
        l.append((s,len(s)))
    l=list(set(l))
    l=sorted(l,key=lambda l: (l[1],l[0]))
    for i in l:
        print(i[0])
n=int(input())
dictionary(n)
cs


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

[BOJ]4948.베르트랑 공준  (0) 2019.04.14
[BOJ]1929. 소수 구하기  (0) 2019.04.13
[BOJ]6064. 카잉 달력  (0) 2019.04.11
[BOJ]1475. 방번호  (0) 2019.04.10
[BOJ]2775. 부녀회장이 될테야  (0) 2019.04.09

문제:

최근에 ICPC 탐사대는 남아메리카의 잉카 제국이 놀라운 문명을 지닌 카잉 제국을 토대로 하여 세우졌다는 사실을 발견했다. 카잉 제국의 백성들은 특이한 달력을 사용한 것으로 알려져 있다. 그들은 M과 N보다 작거나 같은 두 개의 자연수 x,y를 가지고 각 년도를 <x:y>와 같은 형식으로 표현하였다. 그들은 이 세상의 시초에 해당하는 첫 번째 해를 <1:1>로 표현하고, 두 번째 해를 <2:2>로 표현하였다. <x:y>의 다음 해를 표현한 것을 <x':y'>이라고 하자. 만일 x<M이면 x'=x+1이고, 그렇지 않으면 x'=1이다. 같은 방식으로 만일 y<N이면 y'=y+1이고, 그렇지 않으면 y'=1이다. <M:N>은 그들 달력의 마지막 해로서, 이 해에 세상의 종말이 도래한다는 예언이 전해 온다.


예를 들어, M=10 이고 N=12라고 하자. 첫 번째 해는 <1:1>로 표현되고, 11번째 해는 <1:11>로 표현된다. <3:1>은 13번째 해를 나타내고, <10:12>는 마지막인 60번째 해를 나타낸다.


네 개의 정수 M,N,x와 y가 주어질 때 <M:N>이 카잉 달력의 마지막 해라고 하면 <x:y>는 몇 번째 해를 나타내는지 구하는 프로그램을 작성하라.

입력:

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다. 각 줄에는 네 개의 정수 M,N, x와 y가 주어진다. (1<=M,N <=40,000, 1<= x <= M, 1 <= y <= N) 여기서 <M:N>은 카잉 달력의 마지막 해를 나타낸다.

출력:

출력은 표준 출력을 사용한다. 각 테스트 데이터에 대해, 정수 k를 한 줄에 출력한다. 여기서 k는 <x:y>가 k번째 해를 나타내는 것을 의미한다. 만일 <x:y>에 의해 표현되는 해가 없다면, 즉, <x:y>가 유효하지 않은 표현이면, -1을 출력한다.

풀이 방법:

최소공배수를 사용해서 푸는 방법도 있다고 하지만 규칙을 찾아서 풀어보려고 했다. 10 12의 케이스에 대해서 순서대로 해를 나열해보고 재배열 해보니 다음과 같이 표를 얻을 수 있었다.


1,1 

2,2 

3,3 

4,4 

5,5 

6,6 

7,7 

8,8 

9,9 

10,10 

1,11 

2,12 

3,1 

4,2 

5,3 

6,4 

7,5 

8,6 

9,7 

10,8 

1,9 

2,10 

3,11 

4,12 

5,1 

6,2 

7,3 

8,4 

9,5 

10,6 


지금은 x좌표를 고정으로 잡고 재배열을 한 경우이다. 테스트 케이스 중 3,9를 찾아야 하는 경우라면 3을 고정시키고 y좌표만 변경시키며 3,9가 존재하는지 찾아보면 된다. y좌표도 변하는 규칙을 찾을 수가 있는데 지금은 10,12인 경우이므로 한 줄이 넘어갈 때마다 (n-m)=-2씩 더해주면 된다. 그러면 3,9는 위 표에서 3,11 밑 행에 있음을 알 수 있다. 또한 이렇게 규칙적으로 y좌표가 변하기 때문에 while문을 사용해 y좌표를 바뀌어주다가 다시 원래의 수가 돌아온다면 존재하지 않는 케이스임을 알 수 있으므로 -1을 반환하면 된다.


다음은 위의 규칙에 따라 구하는 코드이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def maya(m,n,x,y):
    if m < n:
        count = y
        if count > m:
            x1=(y-1)%m+1
            x2=(y-1)%m+1            
            while x1 != x:
                x1=((x1+(n-m)-1)%m)+1
                if x1 == x2:
                    return -1
                count+=n
        else:
            x1=y
            x2=y
            while x1 !=x:
                x1=((x1+(n-m)-1)%m)+1
                if x1 == x2:
                    return -1
                count+=n
    else:
        count =x
        if count > n:
            y1=(x-1)%n+1
            y2=(x-1)%n+1
            while y1 !=y:
                y1=((y1+(m-n)-1)%n)+1
                if y1 == y2:
                    return -1
                count+=m
        else:
            y1=x
            y2=x
            while y1 !=y:
                y1=((y1+(m-n)-1)%n)+1
                if y1 == y2:
                    return -1
                count+=m
    return count
def repeat(n):
    for i in range(n):
        m,n,x,y=map(int,input().split())
        print(maya(m,n,x,y))
n=int(input())
repeat(n)
cs

  


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

[BOJ]1929. 소수 구하기  (0) 2019.04.13
[BOJ]1181. 단어정렬  (0) 2019.04.12
[BOJ]1475. 방번호  (0) 2019.04.10
[BOJ]2775. 부녀회장이 될테야  (0) 2019.04.09
[BOJ]10250. ACM 호텔  (0) 2019.04.08

문제:

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

입력:

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

출력:

첫째 줄에 필요한 세트의 개수를 출력한다.

풀이 방법:

크게 두 가지 케이스만 생각해주면 된다. 6과 9를 제외하고 다른 숫자들중 자주 나타나는 숫자의 개수와 6과 9의 개수를 센 것을 반으로 나눈 것의 올림(6과 9는 서로 돌려서 사용할 수 있다.)을 구해 이 두 값 중 최댓값을 반환해주면 된다.

1
2
3
4
5
6
7
8
9
10
def plastic(n):
    a=[]
    import math
    for i in '01234578':
        a.append(n.count(i))
    min1= max(a)
    min2= math.ceil((n.count('6')+n.count('9'))/2)
    return max(min1,min2)
n=input()
print(plastic(n))
cs


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

[BOJ]1181. 단어정렬  (0) 2019.04.12
[BOJ]6064. 카잉 달력  (0) 2019.04.11
[BOJ]2775. 부녀회장이 될테야  (0) 2019.04.09
[BOJ]10250. ACM 호텔  (0) 2019.04.08
[BOJ]2292. 벌집  (0) 2019.04.07

문제:

평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

이 아파트에 거주를 하려면 조건이 있는데, "a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다."는 계약 조항을 꼭 지키고 들어와야 한다. 

아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

입력:

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1<=k<=14,1<=n<=14)

출력:

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

풀이 방법:

각각의 케이스가 주어질 때마다 값을 구하는 것 마다 밀 14x14 아파트를 만들어서 각 호수마다 들어가야 하는 사람들의 수를 미리 구하고 난 뒤 인덱스로 접근해서 출력하는 것이 제일 편하고 빠르게 풀 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
answer=[]
for i in range(15):
    answer.append([])
    for j in range(15):
        answer[i].append(0)
answer[0]=list(range(15))
for i in range(1,15):
    for j in range(15):
        answer[i][j]=sum(answer[i-1][:j+1])
n=int(input())
for i in range(n):
    a=int(input())
    b=int(input())
    print(answer[a][b])
cs


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

[BOJ]6064. 카잉 달력  (0) 2019.04.11
[BOJ]1475. 방번호  (0) 2019.04.10
[BOJ]10250. ACM 호텔  (0) 2019.04.08
[BOJ]2292. 벌집  (0) 2019.04.07
[BOJ]2941. 크로아티아 알파벳  (0) 2019.04.06

문제:

ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.
문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H층 건물이라고 가정하자. (1<=H,W<=99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자.이런 형태의 호텔을 H x W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.

방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.

손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.

여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.

입력:

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1<=H,W<=99,1<=N<=H x W).

출력:

프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.

풀이방법:

거리가 낮은 순으로 배정이 되어야 하고 같다면 아래층부터 배정이 된다. 처음엔 xxx1호의 아래층부터 제일 최상층의 xxx1호까지 먼저 배정을 하고 그 다음은 xxx2호를 동일하게 배정을 한다. 그러면 단순하게 몫을 구하는 연산자와 나머지를 구하는 연산자로 쉽게 구할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
def hotel(h,w,n):
    a=(n-1)//h
    b=((n-1)%h)+1
    if a < 9:
        return str(b)+str(0)+str(1+a)
    else:
        return str(b)+str(1+a)
def repeat(n):
    for i in range(n):
        h,w,n=map(int,input().split())
        print(hotel(h,w,n))
n=int(input())
repeat(n)
cs



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

[BOJ]1475. 방번호  (0) 2019.04.10
[BOJ]2775. 부녀회장이 될테야  (0) 2019.04.09
[BOJ]2292. 벌집  (0) 2019.04.07
[BOJ]2941. 크로아티아 알파벳  (0) 2019.04.06
[BOJ]1157. 단어 공부  (0) 2019.04.05

문제:


위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 5개, 58까지는 5개를 지난다.

입력:

첫째 줄에 N(1<=N<=1,000,000,000)이 주어진다.

출력:

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

풀이 방법:

가운데 1에서부터 시작했을 때 1을 둘러싸고 있는 벌집의 방 갯수는 6이고, 이를 1층이라고 부르자.
그렇다면 이 1층을 둘러싸고 있는 벌집의 방 개수를 세어보면 12이고 이를 2층이라 할 수 있다.
계속 세어나가다 보면 3층의 갯수는 18개, 4층의 갯수는 24개...이렇게 증가함을 알 수 있다.
즉, 이 문제는 N이 몇 층에 속해있는지 파악하면 그 층이 최소 개수의 방의 수이다. while문을 사용해서 m이 n을 넘어갈 때까지 반복시키고 그 때마다 count를 세어서 count를 최종 반환하도록 한다.
1
2
3
4
5
6
7
8
9
10
11
def bee(n):
    m = 1
    k = 1
    count = 1
    while n > m:
        count+=1
        m = m+6*k
        k+= 1
    return count
n=int(input())
print(bee(n))
cs


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

[BOJ]2775. 부녀회장이 될테야  (0) 2019.04.09
[BOJ]10250. ACM 호텔  (0) 2019.04.08
[BOJ]2941. 크로아티아 알파벳  (0) 2019.04.06
[BOJ]1157. 단어 공부  (0) 2019.04.05
[BOJ]1152. 단어의 개수  (0) 2019.04.04

문제:

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

 크로아티아 알파벳

변경 

 č

 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


'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

문제:

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

입력:

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 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


'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

문제:

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


입력:

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

출력:

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

풀이 방법:

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

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


'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