728x90
반응형

문제:

알파벳 소문자로 이루어진 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


728x90
반응형

'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
728x90
반응형

2019/04/09 - [Lecture Note/DataBase] - [강의노트_DB]1.데이스베이스의 개요

불러오는 중입니다...

 

예전부터 데이터를 관리하는 방법으론 화일 시스템이 있었다. 하지만 파일 시스템은 프로그래밍을 해야 하는 분량이 너무 많고 DBMS에 비해 많은 단점을 가지고 있다. 그래서 DBMS와 파일 시스템이 각각 어떤 특징을 가지고 있고 장단점을 비교해보려고 한다.

파일 시스템을 사용한 데이터 관리

파일 시스템은 DBMS가 등장하기 전인 1960년대부터 사용되어 왔다. 파일 시스템의 기본적인 구성요소는 순차적인 레코드이며 한 레코드는 연관된 필드들의 모임으로 구성되어 있다. 파일을 접근하는 방식이 응용 프로그램 내에서 상세하게 구현되어 있으므로 데이터에 대한 응용 프로그램의 의존도가 높은 편이다.

파일 시스템의 단점

1. 새로운 데이터를 추가하려고 하면 그 파일을 사용하고 있던 프로그램들을 전부 찾아가서 필드를 추가해줘야 한다. 왜냐하면 데이터가 많은 파일에 중복해서 저장되었기 때문이다. 즉 동시성 제어를 제공하지 못한다.

2. 검색하려는 데이터를 쉽게 명시하는 질의어가 제공되지 않는다. 이 때문에 복잡해지고 프로그래머의 생산성이 낮아진다.

3. 회복 기능이 없다.

4. 프로그램과 데이터의 독립성이 없으므로 유지보수 비용이 많이 요구된다.

DBMS를 사용한 데이터베이스 관리

여러 사용자와 응용 프로그램들이 데이터베이스를 공유하고 사용자의 질의를 빠르게, 자동으로 수행된다. 또한 권한이 없는 사용자에게는 데이터를 제공하지 않아 보안성도 좋고, 데이터 간의 복잡한 관계를 표현할 수 있으며 무결성 제약조건을 자동으로 유지시켜준다. 또한 프로그램에 영향을 주지 않으면서 데이터베이스 구조를 변경할 수 있다.(프로그램-데이터 독립성) 

DBMS의 장점

1. 중복성과 불일치가 감소된다.

2. 시스템을 개발하고 유지하는 비용이 감소된다.

3. 표준화를 시행하기가 용이하다.

4. 다양한 유형의 고장으로부터 데이터베이스를 회복할 수 있다.

5. 데이터베이스의 공유와 동시 접근이 가능하다.

DBMS의 단점

1. 추가적인 하드웨어 구입 비용이 발생하고, DBMS 자체의 구입 비용도 비싸다.

2. 직원들의 교육 비용이 많이 소요된다.

DBMS 선정시 고려 사항

*기술적 요인

DBMS에 사용되고 있는 데이터 모델, 사용자 인터페이스, 프로그래밍 언어, 개발 도구 , 저장 구조, 성능, 접근 방법 등

 

*경제적 요인

소프트웨어와 하드웨어 구입 비용, 유지 보수 비용, 직원들의 교육 지원

 

파일 시스템

DBMS

데이터에 대한 물리적 접근만 조정한다.

데이터에 대한 물리적 접근과 논리적인 접근을 모두 조정한다.

동일한 파일을 두 개 이상의 프로그램이 동시에 접근할 수 없다.

동일한 데이터를 다수 사용자가 동시에 접근할 수 있다.

데이터가 비구조적이며, 중복성과 유지비수 비용이 높다.

데이터가 구조화되어 있으며, 중복성과 유지보수 비용이 낮다.

어떤 프로그램이 기록한 데이터는 다른 프로그램에서 읽을 수 없는 경우가 많다.

접근 권한이 있는 모든 프로그램이 데이터를 공유한다.

데이터에 대한 접근은 미리 작성된 프로그램을 통해서만 가능하다.

질의어를 사용하여 데이터에 대한 융통성 있는 접근이 가능하다.

각 응용 프로그램마다 파일이 따로 있으므로 데이터가 통합되어 있지 않다.

데이터가 중복을 배제하면서 통합되어 있다.

728x90
반응형
728x90
반응형

문제:

최근에 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

  


728x90
반응형

'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
728x90
반응형

문제:

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

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 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


728x90
반응형

'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
728x90
반응형

데이터베이스의 정의

데이터베이스는 조직체의 응용 시스템이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임이다. 

데이터 구조는 데이터 모델에 의해 결정된다.

 

데이터베이스 스키마

전체적인 데이터베이스 구조를 뜻하고, 내포(intension)이라고 부름

 

데이터베이스 상태

특정 시점의 데이터베이스의 내용을 의미하며, 외연(extension)이라고 부름

 

데이터베이스 관리 시스템(DBMS)

데이터베이스를 정의하고, 질의어를 지원하고, 리포트를 생성하는 등의 작업을 수행하는 소프트웨어

 

1. 사용자가 새로운 데이터베이스를 생성하고, 구조를 명시할 수 있게 하고, 데이터를 효율적으로 질의 및 수정할 수 있도록 하며, 데이터를 안전하게 보호하며 여러 사용자가 접근을 하는 것에 대해 제어를 해준다.

 

2.SQL은 여러 DBMS에서 제공되는 사실상의 표준 데이터베이스 언어이다.

 

DBMS 사용자

데이터베이스 관리자(DBA: Database Administrator)

데이터베이스 관리자는 조직의 여러 부분의 상이한 요구를 만족시키기 위해서 일관성 있는 데이터베이스 스키마를 생성하고 유지 하는 사람이다.

데이터베이스 스키마(구조)를 생성하고 변경하고, 무결성 제약조건을 명시해줘야 한다. 또한 사용자의 권한을 허용하거나 취소, 역할을 관리해준다. 즉 데이터베이스의 구조를 처음 생성을 하고 유지, 관리를 해주는 사람이다.

 

응용프로그래머

데이터베이스 위에서 특정 응용이나 인터페이스를 구현하는 사람이다.

데이터베이스를 접근하는 부분은 내포된 데이터 조작어를 사용하며 이들이 작성한 프로그램은 최종 사용자들이 기작성 트랜잭션(canned transaction)이라고 부른다.

 

최종 사용자(end user)

질의하거나 갱신하거나 보고서를 생성하기 위해서 데이터베이스를 사용하는 사람이다.

데이터베이스 질의어를 사용하여 매번 다른 정보를 찾은 캐주얼 사용자와 기작성 트랜잭션을 주로 반복해서 수행하는 초보 사용자로 구분

 

데이터베이스 설계자(database designer)

데이터베이스 설계를 담당한다. 데이터베이스의 일관성을 유지하기 위해서 정규화를 수행한다.

 

오퍼레이터

DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람이다.

 

728x90
반응형
728x90
반응형

문제:

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

이 아파트에 거주를 하려면 조건이 있는데, "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


728x90
반응형

'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
728x90
반응형

문제:

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



728x90
반응형

'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
728x90
반응형

문제:


위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 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


728x90
반응형

'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
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

+ Recent posts