[백준] 1011번 Fly me to the Alpha Centauri

[백준] 1011번 Fly me to the Alpha Centauri

출처: [백준] 1011번 Fly me to the Alpha Centauri


문제

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다.

그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 그 크기와 질량이 엄청난 이유로 최신기술력을 총 동원하여 개발한 공간이동 장치를 탑재하였다. 하지만 이 공간이동 장치는 이동 거리를 급격하게 늘릴 경우 기계에 심각한 결함이 발생하는 단점이 있어서, 이전 작동시기에 k광년을 이동하였을 때는 k-1 , k 혹은 k+1 광년만을 다시 이동할 수 있다. 예를 들어, 이 장치를 처음 작동시킬 경우 -1 , 0 , 1 광년을 이론상 이동할 수 있으나 사실상 음수 혹은 0 거리만큼의 이동은 의미가 없으므로 1 광년을 이동할 수 있으며, 그 다음에는 0 , 1 , 2 광년을 이동할 수 있는 것이다. ( 여기서 다시 2광년을 이동한다면 다음 시기엔 1, 2, 3 광년을 이동할 수 있다. )

img

김우현은 공간이동 장치 작동시의 에너지 소모가 크다는 점을 잘 알고 있기 때문에 x지점에서 y지점을 향해 최소한의 작동 횟수로 이동하려 한다. 하지만 y지점에 도착해서도 공간 이동장치의 안전성을 위하여 y지점에 도착하기 바로 직전의 이동거리는 반드시 1광년으로 하려 한다.

김우현을 위해 x지점부터 정확히 y지점으로 이동하는데 필요한 공간 이동 장치 작동 횟수의 최솟값을 구하는 프로그램을 작성하라.


입력

입력의 첫 줄에는 테스트케이스의 개수 T가 주어진다. 각각의 테스트 케이스에 대해 현재 위치 x 와 목표 위치 y 가 정수로 주어지며, x는 항상 y보다 작은 값을 갖는다. (0 ≤ x < y < 231)


출력

각 테스트 케이스에 대해 x지점으로부터 y지점까지 정확히 도달하는데 필요한 최소한의 공간이동 장치 작동 횟수를 출력한다.


예제 입력 1

1
2
3
4
3
0 3
1 5
45 50

예제 출력 1

1
2
3
3
3
4

힌트


출처

  • 문제를 번역한 사람: AIAI

알고리즘 분류


풀이

solution


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
import math

input = sys.stdin.readline

T = int(input())

for _ in range(T):
x, y = map(int, input().split())
distance = y - x

if distance <= 3:
print(distance)
else:
n = int(math.sqrt(distance))
if distance == n ** 2:
print(2 * n - 1)
elif n ** 2 < distance <= n ** 2 + n:
print(2 * n)
else:
print(2 * n + 1)

[백준] 2108번 통계학

[백준] 2108번 통계학

출처: [백준] 2108번 통계학


문제

수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.

  1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
  2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
  3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
  4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이

N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.


출력

첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.

둘째 줄에는 중앙값을 출력한다.

셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.

넷째 줄에는 범위를 출력한다.


예제 입력 1

1
2
3
4
5
6
5
1
3
8
-2
2

예제 출력 1

1
2
3
4
2
2
1
10

예제 입력 2

1
2
1
4000

예제 출력 2

1
2
3
4
4000
4000
4000
0

예제 입력 3

1
2
3
4
5
6
5
-1
-2
-3
-1
-2

예제 출력 3

1
2
3
4
-2
-2
-1
2

힌트


출처


알고리즘 분류


풀이


소스코드

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
import sys
from collections import Counter

input = sys.stdin.readline

N = int(input())
num_list = sorted([int(input()) for _ in range(N)])

# for _ in range(N):
# num_list.append(int(input()))
#
# num_list.sort()

# 산술평균
print(round(sum(num_list) / N))
# 중앙값
print(num_list[N // 2])

# 최빈값
mode_num = Counter(num_list).most_common()
if len(mode_num) > 1:
if mode_num[0][1] == mode_num[1][1]:
print(mode_num[1][0])
else:
print(mode_num[0][0])
else:
print(mode_num[0][0])

# 범위
print(num_list[-1] - num_list[0])

[백준] 12738번 가장 긴 증가하는 부분 수열 3

[백준] 12738번 가장 긴 증가하는 부분 수열 3

출처: [백준] 12738번 가장 긴 증가하는 부분 수열 3


문제

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.


입력

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000)


출력

첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.


예제 입력 1

1
2
6
10 20 10 30 20 50

예제 출력 1

1
4

힌트


출처


비슷한 문제


알고리즘 분류


풀이


소스코드

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 sys
from bisect import bisect_left

input = sys.stdin.readline

N = int(input())
num_list = list(map(int, input().split()))
dp = []


def binary_search(arr, x):
k = bisect_left(arr, x)
if k >= len(arr):
arr.append(x)
else:
arr[k] = x
return arr


for num in num_list:
dp = binary_search(dp, num)

print(len(dp))

[백준] 3020번 개똥벌레

[백준] 3020번 개똥벌레

출처: [백준] 3020번 개똥벌레


문제

개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 번갈아가면서 등장한다.

아래 그림은 길이가 14미터이고 높이가 5미터인 동굴이다. (예제 그림)

img

이 개똥벌레는 장애물을 피하지 않는다. 자신이 지나갈 구간을 정한 다음 일직선으로 지나가면서 만나는 모든 장애물을 파괴한다.

위의 그림에서 4번째 구간으로 개똥벌레가 날아간다면 파괴해야하는 장애물의 수는 총 여덟개이다. (4번째 구간은 길이가 3인 석순과 길이가 4인 석순의 중간지점을 말한다)

img

하지만, 첫 번째 구간이나 다섯 번째 구간으로 날아간다면 개똥벌레는 장애물 일곱개만 파괴하면 된다.

동굴의 크기와 높이, 모든 장애물의 크기가 주어진다. 이때, 개똥벌레가 파괴해야하는 장애물의 최솟값과 그러한 구간이 총 몇 개 있는지 구하는 프로그램을 작성하시오.


입력

첫째 줄에 N과 H가 주어진다. N은 항상 짝수이다. (2 ≤ N ≤ 200,000, 2 ≤ H ≤ 500,000)

다음 N개 줄에는 장애물의 크기가 순서대로 주어진다. 장애물의 크기는 H보다 작은 양수이다.


출력

첫째 줄에 개똥벌레가 파괴해야 하는 장애물의 최솟값과 그러한 구간의 수를 공백으로 구분하여 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
14 5
1
3
4
2
2
4
3
4
3
3
3
2
3
3

예제 출력 1

1
7 2

힌트


출처

Olympiad > Croatian Highschool Competitions in Informatics > 2007 > Croatian Regional Competition in Informatics 2007 3번

Olympiad > Croatian Highschool Competitions in Informatics > 2007 > Regional Competition - Juniors 4번

  • 문제를 번역한 사람: baekjoon
  • 어색한 표현을 찾은 사람: citizen

알고리즘 분류


풀이


소스코드

Using Bisect

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
import sys
from bisect import bisect_left

input = sys.stdin.readline

N, H = map(int, input().split())

down = []
up = []
for i in range(N):
if i % 2 == 0: # 짝수: 석순
down.append(int(input()))
else:
up.append(int(input()))

down.sort()
up.sort()

min_count = N
result = 0

for i in range(1, H + 1):
down_count = len(down) - bisect_left(down, i - 0.5)
up_count = len(up) - bisect_left(up, H - i + 0.5)

if min_count == down_count + up_count:
result += 1
elif min_count > down_count + up_count:
result = 1
min_count = down_count + up_count

print(min_count, result)

non Bisect

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
45
import sys

input = sys.stdin.readline

N, H = map(int, input().split())

down = []
up = []
for i in range(N):
if i % 2 == 0: # 짝수: 석순
down.append(int(input()))
else:
up.append(int(input()))

down.sort()
up.sort()


def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2

if array[mid] < target:
start = mid + 1
else:
end = mid - 1

return start


min_count = N
result = 0

for i in range(1, H + 1):
down_count = len(down) - binary_search(down, i - 0.5, 0, len(down) - 1)
up_count = len(up) - binary_search(up, H - i + 0.5, 0, len(up) - 1)

if min_count == down_count + up_count:
result += 1
elif min_count > down_count + up_count:
result = 1
min_count = down_count + up_count

print(min_count, result)

[백준] 2798번 블랙잭

[백준] 2798번 블랙잭

출처: [백준] 2798번 블랙잭


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 61157 27608 21782 44.404%

문제

카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다.

한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다.

김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.

이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.

N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.


입력

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.

합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.


출력

첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.


예제 입력 1

1
2
5 21
5 6 7 8 9

예제 출력 1

1
21

예제 입력 2

1
2
10 500
93 181 245 214 315 36 185 138 216 295

예제 출력 2

1
497

출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
from itertools import combinations

input = sys.stdin.readline

n, m = map(int, input().split())
cards_list = list(map(int, input().split()))

result = list(combinations(cards_list, 3))

max_sum = 0
for cards in result:
temp_sum = sum(cards)
if m >= temp_sum > max_sum:
max_sum = temp_sum

print(max_sum)

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys

input = sys.stdin.readline

N, M = map(int, input().split())
cards_list = list(map(int, input().split()))

max_sum = 0
for i in range(N):
for j in range(i + 1, N):
for k in range(j + 1, N):
if M >= cards_list[i] + cards_list[j] + cards_list[k] > max_sum:
max_sum = cards_list[i] + cards_list[j] + cards_list[k]

print(max_sum)

[백준] 10039번 평균점수

[백준] 10039번 평균점수

출처: [백준]10039번


문제

상현이가 가르치는 아이폰 앱 개발 수업의 수강생은 원섭, 세희, 상근, 숭, 강수이다.

어제 이 수업의 기말고사가 있었고, 상현이는 지금 학생들의 기말고사 시험지를 채점하고 있다. 기말고사 점수가 40점 이상인 학생들은 그 점수 그대로 자신의 성적이 된다. 하지만, 40점 미만인 학생들은 보충학습을 듣는 조건을 수락하면 40점을 받게 된다. 보충학습은 거부할 수 없기 때문에, 40점 미만인 학생들은 항상 40점을 받게 된다.

학생 5명의 점수가 주어졌을 때, 평균 점수를 구하는 프로그램을 작성하시오.


입력

입력은 총 5줄로 이루어져 있고, 원섭이의 점수, 세희의 점수, 상근이의 점수, 숭이의 점수, 강수의 점수가 순서대로 주어진다.

점수는 모두 0점 이상, 100점 이하인 5의 배수이다. 따라서, 평균 점수는 항상 정수이다.


출력

첫째 줄에 학생 5명의 평균 점수를 출력한다.


예제 입력 1

1
2
3
4
5
10
65
100
30
95

예제 출력 1

1
68

힌트

숭과 원섭이는 40점 미만이고, 보충학습에 참여할 예정이기 때문에 40점을 받게 된다. 따라서, 점수의 합은 340점이고, 평균은 68점이 된다.


출처

Olympiad > 일본정보올림피아드 > 일본정보올림피아드 예선 > JOI 2014 예선 1번


알고리즘 분류



풀이

  • 조건에 맞는 5개의 숫자를 받으면서 더한 후, 평균을 구한다.

소스코드

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
#include <iostream>

using namespace std;

int main()
{
int result=0,tmp;

for(int i=0; i<5; i++){
cin >> tmp;

if(tmp<0 || tmp>100 || tmp%5!=0){
return 0;
}

if(tmp<40){
tmp=40;
}

result+=tmp;
}

cout << result/5;
return 0;
}
[백준] 2920번 음계

[백준] 2920번 음계

출처: [백준]2920번


문제

다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, …, C를 8로 바꾼다.

1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.

연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.


입력

첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.


출력

첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.


예제 입력 1

1
1 2 3 4 5 6 7 8

예제 출력 1

1
ascending

예제 입력 2

1
8 7 6 5 4 3 2 1

예제 출력 2

1
descending

예제 입력 3

1
8 1 7 2 6 3 5 4

예제 출력 3

1
mixed

출처

Contest > Croatian Open Competition in Informatics > COCI 2009/2010 > Contest #1 1번


알고리즘 분류



풀이

  • 8개의 숫자를 순서대로 string으로 받는다. 그리고 그 string이 ‘12345678’ 인지, ‘87654321’ 인지 아닌지 확인 후 알맞은 결과값을 출력시킨다.

소스코드

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
#include <iostream>
#include <string>

using namespace std;

int main()
{
string str;
string tmp;

for(int i=0; i<8; i++){
cin >> tmp;
str.append(tmp);
}

string as="12345678";
string des="87654321";

if(str==as){
cout << "ascending";
}
else if(str==des){
cout << "descending";
}
else {
cout << "mixed";
}

return 0;
}
[백준] 2577번 숫자의 개수

[백준] 2577번 숫자의 개수

출처: [백준] 2577번 숫자의 개수


문제

세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면

A × B × C = 150 × 266 × 427 = 17037300 이 되고,

계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.


입력

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.


출력

첫째 줄에는 A×B×C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A×B×C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.


예제 입력 1

1
2
3
150
266
427

예제 출력 1

1
2
3
4
5
6
7
8
9
10
3
1
0
2
0
0
0
2
0
0

출처

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2006 > 초등부 2번

  • 문제의 오타를 찾은 사람: pineapple
  • 잘못된 데이터를 찾은 사람: tncks0121

알고리즘 분류



풀이

  • 세 개의 자연수를 곱한 값을 10으로 나눈 나머지를 확인하여 해당 배열 인덱스에 카운트 1을 증가시켜준다.

  • 곱한 값은 10으로 나누어 1의 자리를 없앤다.

    ==> 1의 자리 숫자 하나씩 확인하면서, 10으로 나누어서 자릿수를 없애는 방식


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
int main()
{
int A, B, C, result;
int count[10]={}; // 0으로 초기화

cin >> A >> B >> C; // 3개의 값 입력

result=A*B*C;

while(result != 0){
int temp = result %10;
result =result/10;
count[temp]++;
}


for(int i=0; i<10; i++){
printf("%d\n",count[i]);
}

return 0;
}
[백준] 8958번 OX퀴즈

[백준] 8958번 OX퀴즈

출처: [백준] 8958번 OX퀴즈


문제

“OOXXOXXOOO”와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

“OOXXOXXOOO”의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

각 테스트 케이스마다 점수를 출력한다.

예제 입력 1 복사

1
2
3
4
5
6
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

예제 출력 1 복사

1
2
3
4
5
10
9
7
55
30

출처

ACM-ICPC > Regionals > Asia > Korea > Asia Regional - Seoul 2005 A번

  • 문제를 번역한 사람: baekjoon
  • 문제의 오타를 찾은 사람: jh82582

링크


풀이



소스코드

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
#include <iostream>
#include <cstring>
using namespace std;

int main(void)
{
char str[100];
int number = 0, result =0, flag=1;

cin >> number;

for (int i=0; i<number; i++){
cin >> str;
int length = strlen(str); // str의 길이를 미리 계산하여 loop문에서 계속 계산되는 것을 방지?

for(int j=0; j<length; j++){
if (str[j] == 'O'){ // O일 때 결과값 flag만큼 증가
result+=flag;
flag++;
}
else{ // X일 때 flag 1로 초기화
flag=1;
}
}

cout << result << endl;
result =0;
flag =1;
}

return 0;
}
[백준] 1152번 단어의 개수

[백준] 1152번 단어의 개수

출처: [백준] 1152번 단어의 개수


문제

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


입력

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


출력

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


예제 입력 1

1
The Curious Case of Benjamin Button

예제 출력 1

1
6

예제 입력 2

1
Mazatneunde Wae Teullyeoyo

예제 출력 2

1
3

예제 입력 3

1
Teullinika Teullyeotzi

예제 출력 3 복사

1
2

출처


알고리즘 분류



소스코드

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
#include <iostream>
#include <string>

using namespace std;
using std::string;

int main()
{
string str={};
int wordCnt=0; // 단어 갯수

getline(cin,str);

for(int i=0; i<str.length(); i++) {
if(str[i] == ' ')
wordCnt++;
}

if(str.at(0) == ' ')
wordCnt--;

if(str.at(str.length()-1)==' ')
wordCnt--;

cout << wordCnt+1;
return 0;
}