목록Programming (44)
정리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lU13u/btqFzGa6Eip/EMJh4HSKrS8RFPhmCpmEc0/img.png)
스택(Stack)과 큐(queue)는 데이터를 일시적으로 저장하기 위한 대표적인 자료구조입니다. 이번 게시물에서는 스택에 대해서 정리하겠습니다. 스택이란? 스택은 후입선출(LIFO, Last In First Out)의 구조를 가진 자료구조입니다. 가장 마지막에 푸시된 데이터가 가장 먼저 팝 된다는 것입니다. 아래는 스택에 대해서 설명하기 전 알고 있으면 좋은 용어들입니다. 푸시(push) : 스택에 데이터를 넣는 행위를 말합니다 팝(pop) : 스택에서 데이터를 꺼내는 행위를 말합니다. 탑(top) : 스택의 맨 꼭대기, 정상을 말합니다. 바텀(bottom) : 스택의 맨 아래, 바닥을 말합니다. 스택 사용 메서드 자바에서 스택은 import java.util.Stack 을 해줌으로써 라이브러리로 사용할..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bb1VIP/btqFyD0d533/Y0ePVabK0kFazC8IVGWuB0/img.png)
백준 10828번: 스택 - 문제명 그대로 자료구조 중 스택을 이용하면 되는 문제입니다. - Java에서 스택은 java.util.Stack 을 import 하면 쉽게 사용할 수 있는 자료구조입니다. 그래서 이번 문제에서는 util에서 제공해주는 스택을 사용한 코드와 제공해주는 스택을 사용하지 않고 직접 배열로 구현하는 코드 두 가지를 작성해 보았습니다. - 우선 util에서 제공해주는 스택을 사용한 코드입니다. - Stack 라이브러리 중에는 다음과 같은 기능이 있습니다. push() : 스택에 데이터 삽입 pop() : 스택에사 가장 위에 있는 데이터를 팝(반환하고 삭제) peek() : 스택에서 가장 위에 있는 데이터를 읽음(반환) isEmpty() : 스택이 비어있는지를 반환 size() : 스택..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bXcXo6/btqFvuPMsWU/cqbqeLTEvxLvoQy0FPNfO1/img.png)
백준 1024번: 수열의 합 - q = N / L, N을 L로 나눈 값을 q라고 지정해 주었습니다. 그 후 L이 짝수인 경우와 홀수인 경우로 나누어서 코드를 짰습니다. i) L = 짝수 만약 q를 1로 나눈 나머지가 0.5이면 해당 리스트를 출력합니다. ex) N = 18, L = 4, q = 4.5 3, (q-1.5) 4, (q- 0.5) 5, (q+0.5) 6, (q+1.5) ii) L = 홀수 만약 q를 1로 나눈 나머지가 0이면, q가 정수이면 해당 리스트를 출력합니다. ex) N = 18, L = 3, q = 6 5, (q-1) 6, (q) 7, (q+1) -while문의 탈출 조건은 L이 100을 초과하거나 q - (l/2 - 0.5) 값이 음이 되면 탈출합니다. q - (l/2 - 0.5) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bD9FId/btqFth9DpY0/Fded1Uoqn1pFbgmQhIJZL1/img.png)
백준 1010번: 다리 놓기 - 조합(Combination)을 이용하여 푸는 문제입니다. 다리를 지을 수 있는 경우의 수는 mCr 입니다. - int, long형을 사용하면 오버플로우가 발생해서 사용하면 안 됩니다. Java의 경우 BigInterger Class를 사용할 수도 있지만 저는 그냥 double을 사용했습니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GQPDA/btqFrT8Kzkj/Ut5YGrUljUIxz1SJz2rcf1/img.png)
Java를 이용하여 개발 및 실습을 하기 위해서는 JDK를 설치해야 합니다. JDK는 Oracle (오라클) 에서 무료로 설치 할 수 있습니다. (단, 상업용, 운영용, 업무용은 제외입니다. 비상업적인 용도, 실습 용도에 사용되는 한 무료로 사용할 수 있습니다) 1. 자바 다운로드 받기 1. https://www.oracle.com/kr/index.html에 접속합니다. 2. 계정 보기를 눌러 계정을 만든 후에 로그인 합니다. 계정을 만드실 때, Zip-Code를 입력하셔야 합니다. Zip-Code 관련 게시물은 여기 를 클릭해 주세요. 3. 계정 만들기에 사용한 이메일로 확인 이메일이 옵니다. 메일을 통해서 이메일 인증을 해 주세요. 4. 오라클 홈페이지에서 로그인을 합니다. (Username은 가입 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rqBNf/btqFoRiT2iU/1ZUHK27F1MIdDB1bkQ0tJ1/img.png)
백준 13305번: 주유소 - 주유소의 리터당 가격에 대한 배열(price배열)에서 내림차순에 어긋나는 부분이 있는지 확인합니다. 내림차순에 어긋나는 인덱스는 앞의 주유소보다 리터당 가격이 비싸므로 주유를 하면 안 되는 곳입니다. (단, 가장 첫 주유소와 가장 마지막 주유소 제외) 내림차순에 어긋나는 인덱스의 값은 바로 앞 주유소의 리터당 가격으로 바꾸어 줍니다. - 같은 인덱스 값을 가진 거리에 대한 배열과 가격에 대한 배열을 곱한 뒤 총합을 구해줍니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2BXTZ/btqFpKwAFY1/f9Vn5q2Mp3FReoaUfJ1DR1/img.png)
백준 2485번: 가로수 - 유클리드 호제법을 사용해서 푸는 문제입니다. 각 가로수 간의 거리를 구합니다. 거리들의 최대공약수를 구합니다. (거리 / 최대공약수 - 1)들의 합을 구하면 가로수의 최소수를 구할 수 있습니다. 유클리드 호제법에 대한 정보는 아래 게시물에서 참고할 수 있습니다. 2020/07/03 - [백준 BOJ] - 백준 2609번: 최대공약수와 최소공배수 더보기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJUi2K/btqFkT2S8Zm/yriWwUon5MUILkYkFny2N1/img.png)
백준 2609번: 최대공약수와 최소공배수 - 최대공약수와 최소공배수를 구하는 가장 널리 알려진 방법입니다. 이러한 방법을 for문을 이용하여 코드를 만들면 아래와 비슷한 코드를 만드실 수 있을 겁니다. 하지만 시간 초과에 걸려 통과하지 못합니다. - 이 문제는 "유클리드 호제법"을 사용하여 풀어야 합니다. 유클리드 호제법이란, 두 양의 정수 a, b (a > b)에 대하여 a = bq + r (0 ≤ r a = 18, b = 6 a = 18, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HWisT/btqFhLYnXGj/tUR2EH0vTVGBnTwp5pE750/img.png)
백준 1037번: 약수 - 약수의 개수 제곱수: 홀수 개 제곱수가 아닌 수: 짝수 개 - 이 문제에서 제곱수는 진짜약수개수=1이다. 따라서 array[0] * array[0] 을 출력해주면 된다. - 제곱수가 아닌 수인 경우에는 퀵소트(quickSort)를 통해서 오름차순으로 정렬 한 뒤, array[0] * array[진짜약수개수-1] 을 출력해주면 된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cOu6Ge/btqFiQdNKmm/HOKRkcKebuiELkVn8UMHy1/img.png)
백준 1978번: 소수 찾기 - Arraylist 혹은 배열을 사용하여 문제를 풉니다. - 소수는 1과 자기자신만으로 나누어지는 수이므로 2부터 입력된 수-1 까지의 수로 나누어지는지 확인합니다. - 만약에 나누어 떨어진다면 count--을 한 뒤 내부 for문을 나오면 count++을 하여 결과적으로 count가 변함 없게 유지합니다. - 1은 내부 for문이 작동되지 않아 소수로 인식되므로(count++가 됨) if문을 통해 1은 count--을 합니다.