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

 

1427번: 소트인사이드

첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

간단한 정렬문제!

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

백준 1620 [C++]  (0) 2021.01.09
백준 2887 [C++]  (0) 2020.10.27
백준 10825 [C++]  (0) 2020.10.25
백준 10814  (0) 2020.03.02
백준 1181  (0) 2020.01.15

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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 이상 100,000,000 이하의 정수이다.

www.acmicpc.net

 

처음에는 시간초과가 3번 정도 났나...

 

문제 파악은  별게 없는 것 같습니다.

 

그리고 레이저는 입력방향의 반대 방향으로 쏘기 때문에 입력을 받으면서

 

지금 들어와있는 입력 값들만 보면 됩니다.

 

처음에는 그 건물로 부터 이전에 들어온 값들을 보면서 크기를 비교 했는데 시간초과

 

최악의 경우 시간을 훨씬 뛰어 넘기 떄문이겠죠

 

그래서 비교의 수를 줄이기 위해 어떻게 할까 하다가

 

만약 1번 건물의 높이가 4이고 2번에 들어온 건물의 높이가 8이면 그 이후 건물들은 1번 건물은 볼필요도 없습니다.

 

즉 약간 높은건물에 가려서 보이지 않는 다는 느낌을 떠올린다면 스택을 이용하여 풀수 있습니다.

 

새로운 높은 건물이 들어 온다면 그 이전의 건물들은 모두 스택에서 빼버리는 거죠

 

숫자가 작을때는 별로 차이가 안나겠지만 숫자가 엄청 커질경우 시간차이가 상당 할 것으로 보입니다.

 

-첫번째 시간초과 났던 소스 입니다.-

 

 

-스택을 이용하여 시간초과를 해결한 코드 입니다.-

 

 

 

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

백준 1406 [C++]  (0) 2021.01.09
백준 10799 [C++]  (0) 2021.01.09
백준 1874 [C++]  (0) 2021.01.09
백준 3986  (0) 2020.03.02

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

 

1305번: 광고

첫째 줄에 광고판의 크기 L이 주어지고, 둘째 줄에 현재 광고판에 보이는 문자열이 주어진다. L은 백만보다 작거나 같은 자연수이다.

www.acmicpc.net

입력 값과 출력값은 간단해서

 

따로 말할건 없고

 

kmp알고리즘을 공부하고 첫 문제였는데

 

lps table을 만들면되는 문제인데

 

prefix와 suffix를 찾으면 되는 문제이다.

 

즉 입력받은 문자열의 lps table을 구한 후 

 

문자열의 마지막 글자 의 lps table에 해당되는 값을 보면되는데

 

해당 전광판에서 적혀있는문구는 뒤에 아직 나오지 않은 문자열이 있고(1초마다 나옴)

 

입력 문자열의 prefix와 suffix만 같으면 1초뒤에 나올 문자는 그 뒤에 이어지는 문자열이 나온다라고

 

생각하고 구해주면 된다.

 

 

 

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

 

1059번: 수2

첫째 줄에 Lucky Set에 포함된 숫자의 개수 L이 주어진다. 둘째 줄에는 L개의 수가 주어진다. 이 수는 1,000보다 작거나 같은 자연수이고, L은 50보다 작거나 같은 자연수이다. 그리고 중복되지 않는다. 마지막 줄에는 N이 주어진다. N은 Lucky Set에서 가장 큰 수보다 작거나 같은 자연수이다.

www.acmicpc.net

어느정도의 규칙을 파악하는 건데

 

생각보다 마지막 출력에서 식을 잘못 세워 여러번 틀렸다.

 

max, min 을 설정해두고 그려가면서 하면 편하고

 

N은 B보다 커질 경우는 생각할 필요 없다(조건상)

 

N이 럭키셋의 모든 수들보다 작은 (즉 N이 직선상에서 가장 왼쪽에 있는경우)

 

를 함께 생각해서 식을 세워주면 된다.

 

그리고 N이 럭키셋에 있는 수 중 하나와 같게 된다면 UNLUCKY셋을 하나도 구성 할 수 없으므로

 

0을 출력하고 리턴하면 된다.

 

 

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 1764 : 듣보잡  (0) 2020.03.26
백준 16212  (0) 2019.12.31
백준 16433  (0) 2019.12.31
백준 10995  (0) 2019.12.30
백준 15947  (0) 2019.12.30

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

 

16212번: 정열적인 정렬

형준이는 수열을 하나 가지고 있다. 형준이는 수열을 정열적으로 정렬해보려 한다. 과연, 정렬할 수 있을까?

www.acmicpc.net

 

기본적인 정렬을 할줄 아는지 물어보기 위한 문제 인듯 싶네요

 

c++에서 정렬은 

 

sort(arr.begin(),arr.end()) 이렇게 하고

 

내림차순, 오름 차순이냐에 따라 greater<int> () 를 파라미터로 추가 해주느냐 마느냐 결정하시면 될 듯 합니다.

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 1764 : 듣보잡  (0) 2020.03.26
백준 1059  (0) 2019.12.31
백준 16433  (0) 2019.12.31
백준 10995  (0) 2019.12.30
백준 15947  (0) 2019.12.30

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

 

15947번: 아기 석환 뚜루루 뚜루

첫 번째 줄에 석환이가 N번째로 부를 단어를 출력한다. 여기서 단어란 가사 중 공백으로 구분되는 연속된 알파벳 소문자열을 뜻한다. 단, 출력할 단어가 “tururu...ru”일 때, “ru”가 k(k ≥ 5)번 반복되면 “tu+ru*k”와 같이 출력한다.

www.acmicpc.net

몇가지 조건들만 맞춰서 출력하도록 하면된다.

 

14개의 단어들이 한 단위로 구성되는데 숫자도 14개로 고정이라서 쉽다.

 

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 16433  (0) 2019.12.31
백준 10995  (0) 2019.12.30
백준 1654  (0) 2019.12.29
백준 10818  (0) 2019.12.25
백준 10757 큰 수 A+B  (0) 2019.11.24

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

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 후 K줄에 걸쳐 이미 가지고 있는 각 랜선의 길이가 센티미터 단위의 정수로 입력된다. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.

www.acmicpc.net

 

요즘 프로젝트로 biginteger를 다루는 자료형을 만들었었는데

 

이것의 부작용인지..... 문제를 처음 봤을때 조건들의 숫자가 그렇게 크지 않다고 생각하고 아무렇게나 접근했었는데

 

위와 같이 큰 수부터 1씩 감소 시켜주면서 잘라서 개수를 비교하여 처음  N 과 같아질때의 수를 출력하는 식으로 했더니?

 

채점중 2퍼인가 에서 시간초과...5퍼인가?.....

 

꽤 채점이 되다가 시간초과가 떳으면 이 코드에서 시간을 줄여보고자 생각을 했을 수도 있겠지만

 

터무늬 없어서 방법을 바꿔야 한다는 것을 깨닫고 문제 조건을 다시 파악했다....

 

무엇이 좋을까 하다가 떠오른건 "이분탐색"

 

코드의 디테일 까지는 잘 생각이 안나서 짜면서 신경 써야되는 부분이 있지만

 

역시 개념자체는 배워놓으면 잘 까먹지 않고 생각 나는 것 같아서 혼자 뿌듯....

 

이분 탐색으로 짠 코드는 다음과 같다.

 

간단해서 따로 설명할 것은 없어보이고 

 

길이는 1이상 이기때문에 처음 bottom값을 0으로 설정하면 채점중 런타임 에러가 나타난다. <주의>

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 10995  (0) 2019.12.30
백준 15947  (0) 2019.12.30
백준 10818  (0) 2019.12.25
백준 10757 큰 수 A+B  (0) 2019.11.24
백준 10989 수정렬하기3  (0) 2019.11.16

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

 

10757번: 큰 수 A+B

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

www.acmicpc.net

- 아무 생각 없이 long long (int)로 제출 했다가 당연히 안됨!.

- 하나의 자료형에 담을 수 없는 큰 수 들의 입력, 출력은 더더욱 더!

- 문자열을 이용하자!

- 이런 생각 후의 단계는 단순 했습니다.

- 1단계 : 자릿수 맞추기

      3200 + 10 을 그냥 문자열에 넣고 계산하면

      3 2 0 0

  +  1 0   

      이 되므로 원하는 결과가 안나온다.

      자릿수를 맞춰 앞쪽에 0을 넣어 0 0 1 0 을 만들어주자.

- 2단계 : 더한후 carry값을 계산하자!

- 두 단계만 생각하면 간단했습니다.

/수정/ 

생각해 봤는데 오류가 있는데 이게 결과를 int배열로 잡아서

출력에는 이상이 없지만 result[0]은 carry 처리가 제대로 되지 않습니다.

즉 이 문제에서는 상관없이 결과는 잘 나오지만 다른 i번째의 출력과 일관성이 없는거 같습니다.

잘 못 짠듯...... 뒤집어서 다 계산하고 캐리까지 계산하고 마지막에 뒤집을까....

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 1654  (0) 2019.12.29
백준 10818  (0) 2019.12.25
백준 10989 수정렬하기3  (0) 2019.11.16
백준 10773 제로  (0) 2019.11.16
백준 1874 스택수열  (0) 2019.11.14

+ Recent posts