반응형

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

 

2800번: 괄호 제거

첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. 수식을 입력받아 각 괄호에 번호를 붙입니다.

 

2. 조합을 이용하여 각 괄호들을 제거해주고, set 자료구조에 저장하여 중복을 제거해줍니다.

 

3. 저장된 답을 출력합니다.

 

[ 소스코드 ]

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<iostream>
#include<string>
#include<stack>
#include<set>
 
using namespace std;
 
string str;
int arr[200];
set<string> ans;
int visited[11];
int cnt;
 
void dfs(int limit, int level, int num)
{
    if (level == limit) {
        string temp = "";
        for (int i = 0; i < str.size(); i++) {
            if (visited[arr[i]] != 1) {
                temp += str[i];
            }
        }
 
        ans.insert(temp);
        return;
    }
 
    for (int i = num; i <= cnt; i++) {
        visited[i] = 1;
        dfs(limit, level + 1, i + 1);
        visited[i] = 0;
    }
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> str;
    stack<int> s;
 
    for (int i = 0; i < str.size(); i++) {
        if (str[i] == '(') {
            cnt++;
            arr[i] = cnt;
            s.push(cnt);
        }
        else if (str[i] == ')') {
            arr[i] = s.top();
            s.pop();
        }
    }
 
    for (int i = 1; i <= cnt; i++) {
        dfs(i, 01);
    }
 
    for (auto& next : ans) {
        cout << next << '\n';
    }
}
cs
반응형
반응형

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

 

23326번: 홍익 투어리스트

도현이는 홍익 투어리스트가 되어 홍익대학교를 견학하려고 한다. 홍익대학교는 $N$개의 구역이 원형으로 배치된 모습이다. $1$번 구역에서 시계 방향으로 각각 $2$번, ... , $N$번 구역이 존재하고,

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. set 자료구조를 활용하여 명소의 위치를 저장합니다. 

 

2. arr배열을 만들어 해당 좌표가 명소인지 아닌지 체크합니다.

 

3. 1번 명령이 주어지면 명소인지 아닌지 arr배열로 체크하고, 명소라면 arr[ i ]를 0으로 바꾸고, set에서 erase 합니다. 반대의 경우 arr[ i ]를 1로 바꾸고, set에 insert 합니다.

 

4. 2번 명령이 주어지면 x %= N 후 현재 좌표에 x를 더해주고, 이후 좌표가 N보다 크다면 N을 빼줍니다.

 

5. 3번 명령이 주어지면 set이 비어있다면 -1을 출력하고, 그렇지 않다면 현재 좌표를 기준으로 lower_bound를 해주고, 그 값에 현재 좌표를 뺀 값을 출력합니다.

 

6. 5번에서 lower_bound의 결과가 set.end()라면 N - cur + lower_bound(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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include<iostream>
#include<set>
 
using namespace std;
 
int N, Q;
int cur = 1;
int arr[500001];
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> N >> Q;
    set<int> s;
 
    for (int i = 1; i <= N; i++) {
        cin >> arr[i];
        if (arr[i] == 1) {
            s.insert(i);
        }
    }
 
    for (int i = 0; i < Q; i++) {
        int cmd;
        cin >> cmd;
 
        if (cmd == 1) {
            int i;
            cin >> i;
            if (arr[i] == 0) {
                arr[i] = 1;
                s.insert(i);
            }
            else {
                arr[i] = 0;
                s.erase(i);
            }
        }
        else if (cmd == 2) {
            int x;
            cin >> x;
            if (x > N) {
                x %= N;
            }
            cur += x;
            if (cur > N) {
                cur -= N;
            }
 
        }
        else {
            if (s.empty()) {
                cout << -1 << '\n';;
            }
            else {
                if (s.lower_bound(cur) == s.end()) {
                    cout << N - cur + (*s.lower_bound(0)) << '\n';;
                }
                else {
                    cout << (*s.lower_bound(cur)) - cur << '\n';;
                }
            }
        }
    }
}
cs
반응형
반응형

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

 

21939번: 문제 추천 시스템 Version 1

tony9402는 최근 깃헙에 코딩테스트 대비 문제를 직접 뽑아서 "문제 번호, 난이도"로 정리해놨다. 깃헙을 이용하여 공부하시는 분들을 위해 새로운 기능을 추가해보려고 한다. 만들려고 하는 명령

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. set 자료구조를 활용하여 문제의 난이도와 번호를 insert 합니다.

 

2. 문제 번호에 따라 난이도를 알 수 있도록 level 배열을 만들어 저장합니다.

 

3. 가장 어려운 난이도의 문제는 set 자료구조의 제일 마지막에 있고, 가장 쉬운 난이도의 문제는 set 자료구조의 제일 앞에 있으므로 명령문에 따라 출력해 줍니다.

 

[ 소스코드 ]

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<iostream>
#include<set>
#include<string>
 
using namespace std;
 
int N, M;
int level[100001];
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> N;
 
    set<pair<int,int>> s;
 
    for (int i = 0; i < N; i++) {
        int P, L;
        cin >> P >> L;
 
        level[P] = L;
        s.insert({ L,P });
    }
    
    cin >> M;
 
    for (int i = 0; i < M; i++) {
        string cmd;
        cin >> cmd;
 
        if (cmd == "add") {
            int P, L;
            cin >> P >> L;
 
            level[P] = L;
            s.insert({ L,P });
        }
        else if (cmd == "recommend") {
            int x;
            cin >> x;
 
            if (x == 1) {
                cout << (*s.rbegin()).second << '\n';
            }
            else {
                cout << (*s.begin()).second << '\n';
            }
        }
        else {
            int P;
            cin >> P;
 
            s.erase({ level[P],P });
        }
    }
}
cs
반응형
반응형

초기 설정

  • VirtualBox에서 Ubuntu 초기 설정 방법

화면 설정

  1. 처음 운영체제를 설치하면 다음과 같이 화면이 고정되어 있습니다. 창 사이즈를 늘려도 창 사이즈만 변할 뿐 화면 해상도는 변하지 않습니다.

  1. 상단 메뉴바 목록에서 장치 > 게스트 확장 CD 이미지 삽입 메뉴를 선택합니다.

  1. 실행 버튼을 눌러 실행해줍니다.

  1. 인스톨이 끝나면 노틸러스에서 가상 CD를 마운트 해제해줍니다.

  1. 리눅스를 종료하고, Virtual Box 관리자에서 설정 버튼을 눌러줍니다.

  1. 디스플레이를 선택하고 그래픽 컨트롤러를 VBoxVGA로 변경해줍니다.

vim

  1. vim을 다운받아 줍니다.
    sudo apt-get install vim

  2. vimrc파일을 수정해줍니다.
    vi ~/.vimrc

  3. vimrc파일을 다음과 같이 채워줍니다.

    " Syntax Highlighting 
    if has("syntax") 
            syntax on 
    endif 
    
    set ignorecase "검색시 대소문자 구별 X 
    set showmatch "괄호쌍 찾아주기 
    set autoindent 
    set cindent     "자동 들여쓰기 
    set nu "Line Number 표시 
    colorscheme jellybeans 
    set ts=4 "Tab 너비 
    set shiftwidth=4 "자동 인덴트 너비 
    set laststatus=2 
    set statusline=\ %<%l:%v\ [%P]%=%a\ %h%m%r\ %F\

Ubuntu Server에서 SSH 설치

  1. 설치
    sudo apt-get install ssh
  2. 설정 파일 접속
    vi /etc/ssh/sshd_config
  3. 설정파일 수정
    • Port 22
    • Protocol 2
    • PermitRootLogin no
    • AuthorizedKeysFile .ssh/authorized_keys
    • PasswordAuthentication yes
    • PubkeyAuthentications yes
    • ChallengeResponseAuthentication no
    • X11Forwarding yes
    • UseDNS no
      위와 같이 "#" 주석을 제거해주면 됩니다.
  4. ssh 서버를 재시작합니다
    sudo service ssh restart
  5. ssh 동작확인을 해줍니다.
    sudo service ssh status
  6. 마지막으로 포트포워딩을 해줍니다. VirtualBox 설정 -> 네트워크 -> 고급 -> 포트포워딩

Apt 저장소 미러 변경

  1. sources.list 파일을 sudo 권한으로 열기

    sudo vi /etc/apt/sources.list
  2. 찾아 바꾸기 명령을 이용해 카카오 미러로 변경

    :%s/kr.archive.ubuntu.com/mirror.kakao.com
    :%s/security.ubuntu.com/mirror.kakao.com/
반응형

+ Recent posts