전체 글

문제 풀이 문제를 바로 이해하진 못했지만 이해만 한다면 쉽게 풀 수 있는 문제이다. 후위 표기식은 연산이 뒤에 등장하는 식으로 ABC*+ 라면 ABC*이 A?(B*C)가 된뒤에 +가 오게 되면 A+(B*C) 가되는것이다. 쉽게 말해 문자가 아닌 연산이 오게 되면 앞에 문자 2개를 연산에 의해 계산해주면 된다. 연산이 나오면 최근에 PUSH한 값을 연산해 주는 것이므로 Stack을 사용하면 쉽게 풀 수 있다. import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRea..
인터페이스와 구현부의 차이점 이해 인터페이스와 구현부의 차이점을 이해하는 것이란 클래스를 설계할 때 사용자가 알아야 할 사항과 사용자가 몰라야 할 사항을 잘 구분해 둬야 한다는 점이다. 객체지향의 요소중 하나인 캡슐화 시에 데이터를 은닉하는 메커니즘이란 필수적이지 않은 데이터를 사용자로부터 숨기는 수단이다. 위에 그림을 예로 들면 드라이기를 사용하려고 하는데 전원 콘센트인 인터페이스에 연결되어 있다. 드라이기뿐만이 아닌 냉장고, 충전기 등등 전자기기는 인터페이스인 콘센트를 통해 필요한 전기를 사용할 수 있다. 근데 전자기기가 구현부를 담당하는 전기 생산 방식에 대해 알 필요는 없다. 인터페이스에서 내가 원하는 기능을 제공하고 안전하게 작동한다면 어떻게 구현됐든지 알 필요가 없다는 말이다. 여기에서 만약 ..
문제: 백준 1406 에디터 풀이 처음에 ArrayList로 풀었다가.. 시간초과가 나오고.. 다시 LinkedList로 바꿧지만 역시 시간초과로 결국 Stack를 이용하여 풀었더니 드디어 통과 되었다. 스택 2개를 이용해서 풀건데 lStack에는 커서의 왼쪽값들을 넣어줄거고 rStack에는 커서의 오른쪽 값들을 넣어줄거다. 초기에 입력받은 값들은 커서의 왼쪽에 있기때문에 lStack에 넣어준다. 입력받은 테스트 횟수만큼 반복할건데 L,D,B,P에 따라 if문을 추가한다. 스택은 FILO구조를 갖고 있기때문에 커서의 왼쪽값인 lStack의 값들을 rStack에 담아준다. rStack에 있는 값을 꺼내면서 출력한다. import java.io.*; import java.util.*; class Main {..
풀이 문제는 그렇게 어렵지 않다. 공백이 나올 때마다 그전까지 나온 단어를 뒤집어 주기만 하면 되는 문제이다. 첫 번째 풀이는 String[]에 공백 단위로 끊어 넣어준다. StringBuilder의 reverse()를 이용해 문자열을 뒤집어 준 뒤 다시 배열에 넣어준다. 배열을 출력한다. import java.io.*; class Main { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //테스트카운트를 입력받는다 int N = Integer.parseInt(br.readLine()); for (int j = 0;..
코딩에 관심을 갖고 공부한 지 오래되진 않았지만 많은 개발자들이 지식을 공유하고 기록한다는 건 빨리 알아버렸다!. 하지만 평소에 글을 읽지도 쓰지도 않던 내가 쓴다는 건 상상도 할 수 없었다.. 하지만 개발 공부를 하다 보니 공부할게 너무 많고 정리가 필요하다 보니 공부한 걸 정리하는 블로그를 써보는 건 나쁘지 않겠다 하는 차에 "글 쓰는 또라이가 세상을 바꾼다!"라는 모임에 참여하게 되었다. 6개월간 2주마다 1개의 포스트를 작성하고 피드백을 받으며 활동한다. 관심이 있으신 분들은 글또를 참고하세요. 다짐 1. 글의 수가 아닌 글의 퀄리티에 집중하자 - 단순히 많이 쓰는 게 아닌 하나를 쓰더라도 깊게 이해하고 얻어가는 게 있었으면 좋겠다. 글을 쓰다 보니 남들도 볼 수 있다는 생각에 한 번 더 내용을 ..
· 알고리즘
삽입 정렬(Insertion Sort) 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열이라는 가정하에 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하며. 매 순서마다 해당 원소를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다. -정렬 방식삽입 정렬은 두 번째 자료부터 시작하며 왼쪽 값과 비교하여 왼쪽 값보다 작다면 교환한다. 하지만 앞쪽은 이미 정렬되어있다는 가정하에 비교하므로 왼쪽 값과 비교하여 왼쪽 값이 더 작다면 교환하지 않고 끝낸다. public class InsertionSort { public static void main(String[] args) { int[] arr = {7, 5, 2, 4, 3, 1, 9, 6, 0, 8}; insertionSort(arr); for ..
버블정렬(Bubble Sort) 버블정렬은 선택정렬과 유사한 정렬방법으로 두 인접한 원소를 비교하여 정렬하는 방법이다. 시간복잡도가O(n^{2}) 로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 버블정렬은 선택정렬과 다르게 안정 정렬이다. -정렬 방식 버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, … 이런 식으로 (마지막-1) 번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬한다. 1회 반복시에는 배열에 맨뒤에 최댓값이 위치하게 되며 반복 때마다 배열의 뒤쪽부터 최댓값으로 정렬되어 마지막엔 오름차순으로 정렬이 마무리된다. public class Main { public static void main(String[] args) ..
· 알고리즘
Selection Sort [선택 정렬] 선택 정렬은 제자리 정렬 알고리즘의 하나로 입력 배열외의 다른 추가 메모리를 요구하지 않는 정렬방법이며 선택정렬은불안정 정렬이다. 배열에 앞에서부터 최솟값 또는 최댓값을 찾아 교환하는 방식의 알고리즘으로 선택 정렬의 과정은 이렇다. 주어진 리스트 중에 최솟값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다(패스(pass)). 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. public class 선택정렬 { public static void main(String[] args) { int[] arr = {7, 5, 2, 4, 3, 1, 9, 6, 0, 8}; selectionSort(arr); for (int i : arr) { System.out.p..
E@st
학습 기록