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

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다.

www.acmicpc.net

- 처음에 생각하면 복잡한데..... 생각을 하다가 하나씩 어떻게 할까 맞춰보면 쉬운 문제....

 

- 사실 꽤 어려운 문제라고 개인적으로 생각합니다....복잡......

 

- 짜고 나서 보면 매우 쉽지만....

 

- 핵심은 일단 입력은 키 순서대로 들어온다는 것을 이용하는것이 가장 중요한 것 같습니다.

 

- 즉 입력순으로 처리를 하는데 나보다 뒤에 들어오는 사람들은 나보다 큰사람들이라는 것을

 

- 생각하는것이 중요합니다.

 

<코드>

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1439 [C++]  (0) 2020.10.16
백준 1969 : DNA  (0) 2020.03.24
백준 1049  (0) 2020.02.23
백준 1946  (0) 2020.02.23
백준 1120  (0) 2020.02.23

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

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net

- dfs 를 이용한 완전 탐색 문제였습니다. (백트래킹 이라고도 하는...)

 

- 사실 저는 백트래킹이라는 개념을 딱히 그렇게 정의지어 배워본 적이 없어서 다른 문제하나를 풀다가

 

- 접한적은 있습니다만....

 

- 이문제는 dfs 느낌과 비슷하게 재귀를 이용 하여 모든 경우의 수를 모두 탐색 하는 방향으로 해결하였습니다.

 

- 다른건 어려운 것이 없고 최대20 명이 되는 n을 두팀에 나누어 넣는 모든 경우의 수를 어떻게 구현해 내는지가

 

- 핵심이였던 문제인 것 같습니다..

 

<코드>

'알고리즘 문제풀이 > 완탐' 카테고리의 다른 글

백준 1748 : 수 이어 쓰기 1  (0) 2020.03.24
완전탐색(경우의 수) , 순열, 재귀를 통한 구현, 모든 카드 경우의 수  (0) 2020.02.28
백준 14888  (0) 2020.02.21
백준 7568  (0) 2020.02.21
백준 6603  (0) 2020.02.01

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

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주어진다. 가격은 0보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

- 하..... 1시간 가량 헤매였습니다... 화가..나요..

 

- 일단 처음 했던 큰 오류..... 한 브랜드에서 구매할 필요가 없습니다.

 

- 즉 a라는 브랜드에서 패키지를 사고 낱개는 또 b라는 브랜드에서 사도 된다는 뜻....

 

- 그러므로 그냥 연산 하기 전에 min_setprice와 min_oneprice를 구해놓고 시작하면 됩니다.....

 

- 그 후에는 그런게 있습니다 예시 에도 있지만

 

- 만약 12 3 이라는 입력이라고 치면 낱개가 4개 이상인경우 그냥 세트 한개를 사는게 더 이득인 경우가 있습니다.

 

- 그리고 만약 세트보다 낱개 6개를 사는경우가 이득인 이상한경우도 있을 수 있습니다 이를 고려해주면 됩니다.

 

- 그리고 지금 까지 전 코딩 할 때 min을 잘 사용하지 않고 왠만하면 다 구현하여서 했었는데....

 

- 이문제를 풀면서 min을 잘쓰면 참 편리하긴 하구나 라고 느끼긴 했습니다.....

 

- 그리고 !!! 문제가 너무 불친절 합니다... 문제만 읽고서는 오해하게 될 여지가 너무 많습니다.... 물론 제생각....

 

<코드>

 

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1969 : DNA  (0) 2020.03.24
백준 1138  (0) 2020.02.28
백준 1946  (0) 2020.02.23
백준 1120  (0) 2020.02.23
백준 1541  (0) 2020.02.20

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

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성적, 면접 성적의 순위가 공백을 사이에 두고 한 줄에 주어진다. 두 성적 순위는 모두 1위부터 N위까지 동석차 없이 결정된다고 가정한다.

www.acmicpc.net

1. 첫 번째는 입력은 순위 입니다(점수가 아님)  --조심 !

 

2. 전 첫번째 제출한 코드는 시간초과가 되었습니다. 당연한 것이 최악의경우를 생각해보면

 

   입력을 고려해 보았을 떄 10000000000 이는 약 1억번 연산이 1초라고 계산해보면

 

   당연히 시간초과가 나올 수 밖에 없겠죠.

 

3. 그래서 우선 서류점수로 오름차순 정렬을 한후

   

   반복문을 돌리는데 이때는 전체를 다 탐색할 필요가 없이 본인보다 서류점수 우선순위가 높은 사람들

    (즉 본인보다 낮은 index)

   의 면접점수만 확인 하면 되기 때문에 입력이 커질경우 연산 횟수를 대폭 줄일 수 있습니다.

 

** 그리고 저 같은 경우 vector를 사용하였는데 시간적 측면에서 더 단축 하고 싶다면

    그냥 max값을 define 하여 그만큼의 배열을 잡아 버리는 것이 시간적 측면에서는 더 이득인 것 같더라구요 !

 

<시간초과 코드>

 

<맞춘 코드>

 

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1138  (0) 2020.02.28
백준 1049  (0) 2020.02.23
백준 1120  (0) 2020.02.23
백준 1541  (0) 2020.02.20
백준 2875  (0) 2020.02.11

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

 

1120번: 문자열

길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다. A의 앞에 아무 알파벳이나 추가한다. A의 뒤에 아무 알파벳이나 추가한다. 이때, A와 B의 길이가 같으

www.acmicpc.net

- 문제 파악은 어렵지 않고

 

- 입력 출력 조건을 읽어보면

 

- 처음 든 생각은 a(더 짧은 문자열) 을 b(긴 문자열) 의 어느 위치에 위치를 시켜야 같은 문자를 가지는 값이

 

- max가 되는지를 파악한 후 그 값을 a문자열의 길이에서 빼주면 최소로 다른 글자가 나옵니다.

(어차피 위치 시킨이후 다른 문자들은 b와 완벽하게 같은 글자들을 넣어주면 되므로 신경 쓸 필요가 없습니다.)

 

<코드>

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1049  (0) 2020.02.23
백준 1946  (0) 2020.02.23
백준 1541  (0) 2020.02.20
백준 2875  (0) 2020.02.11
백준 10610  (0) 2020.02.10

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

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. 

www.acmicpc.net

- 완전탐색 문제입니다..

 

- 저는 bfs를 이용한 완전탐색을 구현하여 모든 경우의 수를 모두 구했습니다.

 

- 구조체 를 선언하여 그 안에 연산자의 수를 count하는 변수들을 각자 모두 들고 있고

 

- 하나씩 사용하여 계산후 사용한 연산자의 수는 하나 줄여주고 다시 큐에 넣습니다.

 

- 이와 같은 방식으로 bfs를 구현하여 모든 경우의 수를 계산한 후 vector 에 넣어

 

- 내림차순 정렬을 통하여 0번째 항과 마지막 항을 출력하였습니다.

 

- 나름 상세하게 주석을 달아놓았습니다.... 도움이 되는 분들이 있었으면 좋겠네요..

 

- 채점현황을 보니 저는 코드가 상당히 긴 편이였습니다.. 한번 다른분들은 어떤방식으로 푸셨는지 저도 한번 알아봐야겠네요 !

<코드>

'알고리즘 문제풀이 > 완탐' 카테고리의 다른 글

백준 1748 : 수 이어 쓰기 1  (0) 2020.03.24
완전탐색(경우의 수) , 순열, 재귀를 통한 구현, 모든 카드 경우의 수  (0) 2020.02.28
백준 14889  (0) 2020.02.24
백준 7568  (0) 2020.02.21
백준 6603  (0) 2020.02.01

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

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x,y), (p,q)라고 할 때 x>p 그리고 y>q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56,177), (45,165) 라고 한다면 A의 덩치가 B보다 큰

www.acmicpc.net

- 아....너무쉬운 완탐 문제 였습니다...

 

- 처음에 문제를 파악할 때 입력 조건이 생각보다 크지 않다는 것을 체크 했어야했는데

 

- 처음에 무게순으로 정렬후 비교 작업하고 또 순서대로 출력해야 해서 구조체에 순서 저장 변수 따로 저장하고...

 

- 고생하다가 생각해보니 입력 조건이 크지 않다면 그냥 하나씩 전부와 비교하면 된다는 것....

 

- 그외에 특별할 것 없는 완탐 문제였습니다....... 입력 조건 파악을 잘하자....!

 

<코드>

'알고리즘 문제풀이 > 완탐' 카테고리의 다른 글

백준 1748 : 수 이어 쓰기 1  (0) 2020.03.24
완전탐색(경우의 수) , 순열, 재귀를 통한 구현, 모든 카드 경우의 수  (0) 2020.02.28
백준 14889  (0) 2020.02.24
백준 14888  (0) 2020.02.21
백준 6603  (0) 2020.02.01

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

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.

www.acmicpc.net

-입력, 출력은 문제를 통해 쉽게 파악가능하고

 

- 이제 입력을 어떻게 받아와서 이론적으로는 -가 나오면 괄호를 열고

 

- 다음 -가 오기전에 괄호를 닫는 것인데

 

- 구현을 할 때 -가 처음나오면 check를 하고 tmp로 다음 연산부호가 오기전에 더해주고(string 즉 한글자씩이므로)

 

- 그다음부터는 그냥 -부호 붙은 수는 +붙은 수 그냥 다 빼주면 됩니다.

 

- 왜냐? 괄호는 무제한 이니까.....! 자신이 +면 가장 가까운곳에있는 -와 묶어서 빼면 되니깐....

<필기>

<코드>

 

'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글

백준 1946  (0) 2020.02.23
백준 1120  (0) 2020.02.23
백준 2875  (0) 2020.02.11
백준 10610  (0) 2020.02.10
백준 2217  (0) 2020.02.10

+ Recent posts