728x90
반응형

문제:

비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.

  • add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
  • remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
  • check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
  • toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
  • all: S를 {1, 2, ..., 20} 으로 바꾼다.
  • empty: S를 공집합으로 바꾼다. 

입력:

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.

둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

출력:

check 연산이 주어질때마다, 결과를 출력한다.

풀이방법:

python의 set의 내장함수를 적절히 사용하면 쉽게 풀 수 있다.

1. add : set의 add를 사용한다. python의 set은 중복을 지원하지 않기 때문에 x가 이미 있는 경우에는 중복으로 들어가지 않는다.

2. remove : set에서 원소를 제거하는 방법은 remove와 discard가 있다. remove는 원소가 없는 경우 에러를 반환하지만 discard를 그렇지 않다. 따라서 discard를 사용한다.

3. check : python의 in 기능을 사용한다.

4. toggle : 1. add, 2. remove, 3.check의 기능을 적절히 활용하면 된다. 이 명령어에서 원소를 제거하는 경우에는 항상 있다는 보장이 있으므로 remove를 사용했다.

5. all : S를 재정의한다.

6. empty: S를 재정의한다.

연산의 수가 매우 많으므로 sys.stdin.readline()를 사용해서 빠른 입력을 사용한다.

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
import sys
 
= int(sys.stdin.readline())
=set()
for _ in range(M):
    command = sys.stdin.readline().split()
    if command[0]=="add":
        S.add(int(command[1]))
    elif command[0== "remove":
        S.discard(int(command[1]))
    elif command[0== "check":
        if int(command[1]) in S:
            print(1)
        else:
            print(0)
    elif command[0== "toggle":
        if int(command[1]) in S:
            S.remove(int(command[1]))
        else:
            S.add(int(command[1]))
    elif command[0== "all":
        S = set(list(range(1,21)))
    elif command[0== "empty":
        S = set()
    else:
        print("Invalid command")
cs

문제링크:

www.acmicpc.net/problem/11723

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

 

728x90
반응형

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

[BOJ]1613. 역사  (0) 2020.12.31
[BOJ]13908. 비밀번호  (0) 2020.12.29
[BOJ]1527. 금민수의 개수  (0) 2020.12.22
[BOJ]7453. 합이 0인 네 정수  (0) 2020.12.10
[BOJ]2294. 동전 2  (0) 2020.12.08
728x90
반응형

2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기

2019/02/05 - [Language/Python] - [Python 따라하기]2. 자료형_part 1(String, Int,Float, List)

2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part2(Tuple,Set,Dictionary)

2019/02/19 - [Language/Python] - [Python 따라하기]4. 조건문

2019/02/26 - [Language/Python] - [Python 따라하기]5. 반복문(For, While, break, continue)

2019/03/05 - [Language/Python] - [Python 따라하기]6. 함수만들기(def, print, format)

2019/03/12 - [Language/Python] - [Python 따라하기]7. 파일 입출력 (File I/O)

2019/03/19 - [Language/Python] - [Python 따라하기]8. 클래스와 상속(Class, inheritance)

2019/03/26 - [Language/Python] - [Python 따라하기]9. 예외처리(try,except,finally)

유용한 내장 함수 및 외장 함수

파이썬을 더 잘 사용하기 위해서 많은 내장함수와 외장함수를 알고 있는 것이 중요하다. 남들보다 더 많이 알고 있다면 내가 만들고자 하는 프로그램의 작업량이 훨씬 줄을 수 있을 것이다.

내장함수

내장함수는 외장함수와는 달리 import가 필요하지 않다. 따라서 아무런 설정이 없어도 바로 사용할 수 있다.

abs

abs(x)는 어떤 숫자를 입력으로 받았을 때, 그 숫자의 절대값을 돌려주는 함수이다.


chr

chr(int)는 아스키 코드값을 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이다.

divmod

divmod(a,b)는 2개의 숫자를 입력으로 받는다. 그리고 a를 b로 나눈 몫과 나머지를 튜플 형태로 반환하는 함수이다.


몫을 구하는 연산자 //와 나머지를 구하는 연산자 %로 구한 것과 같다.


filter

영어 단어의 뜻과 같이 조건에 맞는 값들을 걸러낸다는 동작을 한다. 첫 번째 인수로 함수 이름을, 두번째 인수로 iterable한 자료형을 받는다. 그래서 iterable한 자료형의 값들을 함수로 넣어 참인 것들만 묶어서 반환한다.

map

filter처럼 map(f,iterable)로 함수와 iterable한 객체를 받는다. map은 filter와 비슷한 역할을 하지만 iterable의 각 요소에 함수 f에 의해 수행된 결과를 묶어서 반환을 한다.

ord

chr의 반대성격을 가지는 함수이다. ord(c)는 문자의 아스키 코드값을 반환하는 함수이다.

외장함수

외장함수란 전 세계의 파이썬 사용자들이 만든 유용한 프로그램들을 모아 놓은 것이다. 이를 파이썬 라이브러리라고 부르는데, 모든 라이브러리를 다 알 필요는 없고 어떤 일을 할 때 어떤 라이브러리를 사용해야 한다는 정도만 알고 있으면 된다.

os

os 모듈은 환경 변수나 디렉토리, 파일 등을 제어할 수 있게 해주는 모듈이다.

os.environ

현재 시스템의 환경 변수 값들을 보여준다.

os.chdir

os.chdir을 이용하여 아래와 같이 현재 디렉토리의 위치를 변경할 수 있다.

os.getcwd

os.getcwd는 현재 자신의 디렉토리 위치를 반환한다.

glob

파일을 읽고 쓰는 기능이 있는 프로그램을 만들다 보면 특정 디렉토리에 있는 파일 모두를 가져와야 할 때가 있다. 이 때 사용하는 모듈이 바로 glob이다.

glob모듈은 디렉토리 내의 파일들을 읽어서 리스트로 반환한다. * , ? 등을 사용해서 원하는 파일만 읽을 수 있다.

datetime

datetime 패키지에서는 날짜와 시간을 함께 저장하는 datetime 클래스, 날짜만 저장하는 date 클래스, 시간만 저장하는 time 클래스가 있다.
그중 가장 많이 사용하는 datetime 클래스에 대해서 소개한다.

datetime.dateime 클래스

패키지 이름과 클래스 이름이 datetime으로 같기 때문에 사용할 때 주의해야 한다. datetime에서 반환하는 객체는 datetime.datetime이다. 가장 대표적인 것은 현재 시간을 출력하는 now()이다.


now()에서 생성된 객체들에 대해 다음과 같이 접근할 수 있다.


datetime.datetime에는 여러 메서드들도 제공하지만 그중 strftime()을 자주 사용하는 문자열을 반환해주는 함수이다. 이 메서드는 어떤 형식으로 문자열을 만들지 결정하는 문자열을 인수로 받는다. 자세한 것은 다음 링크에서 확인할 수 있다.

https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior


random

random은 난수를 발생시키는 모듈이다. 다음은 0~1.0 사이의 실수 중에서 난수값을 리턴하는 예시이다.

randint

random.randint(a,b)와 같이 사용하며 a에서 b 사이의 정수 중에서 임의의 값을 반환한다.

random.choice

random.choice(list)와 같이 사용하며 list 값 중 무작위로 하나를 선택하여 반환한다.

random.shuffle

random.shuffle(list)와 같이 사용하며 list를 무작위로 섞는다.



728x90
반응형

+ Recent posts