일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- STREAM
- tomcat
- mybatis
- container
- sonarQube
- 캐시서버
- 액세스회선
- Jenkins
- Linux
- map
- post
- Spring
- Set
- jdk
- cloud
- Java
- Pipeline
- gradle
- docker
- DevOps
- 소켓
- 라우터
- ansible
- JPA
- IntelliJ
- 방화벽
- 허브
- LAN어댑터
- Collection
- AOP
- Today
- Total
목록분류 전체보기 (195)
거북이-https://velog.io/@violet_evgadn 이전완료
코딩 테스트 시 필요한 이유 트라이란 문자열을 저장하고 효율적으로 탐색하기 위한 트리형태의 자료구조이다. 대학 수업 시간에 Tree의 문자열 형태라고 공부하긴 했지만 그 당시 난이도가 너무 높고 수업에서 중요한 비중을 두지도 않았기에 그냥 넘겼다. 그런데 카카오 코딩 테스트 4 Level을 풀다 보니 문자열 관련 문제는 대부분 Trie나 DP를 사용해야지만 시간 부족 문제가 발생하지 않았다. DP는 아이디어의 문제라고 하더라도 Trie는 개념을 모른다면 사용할 수조차 없었다. 따라서 Trie에 대해서 자세히 알아보고 직접 구현까지 해보기로 하였다. 트라이 작동 원리 문자열 집합 ["word","war","warrior","world", "go", "gone", "goto"]을 트라이로 구현한 것이다. 트..
에러 내용 개발 서버의 Tomcat을 재시작하는데 아래 문구가 마지막으로 뜨면서 Tomcat이 시작되지 않았다. ... INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 793 ms 분명 Server startup이라고 되어 있고 이전 단계에서 어떠한 에러가 발생한 것도 아닌데 서버가 기동되지 않는 것을 보고 이상하다 생각하며 다시 시작시켜봤지만 여전히 저 문구에서 더 이상 서버 기동이 진행되지 않았다. Catalina.start 문구를 보았을 때 Catalina 쪽에서 생긴 문제라고 생각하였고 많은 시간의 구글링을 통해 원인과 해결 방법을 찾아냈다. 에러 이유 Linux에서 random 함수를 사용하는 경우 기본적으로는 /..
코딩 테스트 시 필요한 이유 먼저 말하고 갈 것은 아래 내용들이 필수적으로 알아야 하는 메서드들은 아니다. 하지만 Collections에는 꽤 많은 편리한 메서드들이 구현되어 있는데 이를 코딩 테스트에서 직접 구현하고 있으면 당연히 에러 발생 가능성이 있을 것이다. 귀찮고 위험성 있는 작업을 줄이고 로직을 생각하는 데에만 집중하기 위해 미리 구현된 메서드 중 활용할 것 같은 것들을 골라내는 작업이 한 번쯤은 필요하다고 생각했다. 참고로 이전에 배웠던 "Collection"은 단순한 인터페이스이며 "Collections"는 Collection들을 다루기 위한 클래스라고 알고 있으면 될 것이다. Collections 메서드 ◎ Collection 중 최대(최솟값) 찾기 Collections.max(Colle..
코딩 테스트 시 필요한 이유 이전에도 말했듯 코딩 테스트에서 나올 확률이 가장 높은 문제는 "문자열 처리" 문제이다. 진짜 문제를 풀다보면 생각 그 이상으로 문자열 처리 문제를 많이 낸다. 문자열 처리에선 split같은 String 고유 함수도 중요하겠지만 StringBuilder 객체가 매우 중요하다고 말할 수 있다. 이유는 많지만 중요한 이유는 2가지라고 생각한다. 먼저 연산 속도의 문제이다. 일반적으로 String 문자열을 합칠 때 "String + String" 형식으로 "+" 연산자를 활용한다. 하지만 "+" 연산자를 통해 String 문자열을 합치면 성능도 떨어지고 메모리도 비효율적으로 활용된다. (이유는 아래에서 자세히 알아보자) 2번째 문제는 String 객체의 경우 Index에 해당하는 ..
코딩 테스트 시 필요한 이유 코딩 테스트를 풀면서 생각보다 "char[] charArr"를 사용하는 경우가 많았다. 대부분 char[] charArr = str.toCharArray() 처리를 한 뒤 푸는 문제였다. 이 경우 2가지 처리 방법이 필요했는데 "배열을 Collection로 만들기"와 "char 배열을 String으로 만들기"이다. 물론 for문을 통해 charArr를 순회하거나 charAt() 메서드를 통해 글자 하나씩 Collection에 넣는 방법도 있겠지만 이전에 사용했던 "Stream"을 활용하고 싶은 욕구가 컸다. 마찬가지로 char 배열을 String으로 만드는 것도 StringBuilder를 사용하는 것이 아닌 바로 String 데이터로 만들고 싶었다. 따라서 이 2가지 방법을 ..
코딩 테스트 시 필요한 이유 필자는 Brute Force 방식으로 코테를 푸는 것에 대한 거부감이 있었다. 말이 좋아 Brute Force 방식이지 가볍게 말하면 일일이 세보자라는 알고리즘이고 대기업들은 코테로 이런 단순한 알고리즘 문제를 내지는 않을 것이라 생각했기 때문이다. 하지만 프로그래머스에 있는 코딩 테스트 문제를 풀어보며 생각보다 Brute Force 방식으로 풀어도 되는 문제들이 많았다. 특히 Lv2 같은 쉬운 문제들은 대부분 Brute Force 방식을 사용하고 있었다. 이렇다보니 대기업도 Brute Force 방식으로 문제를 풀도록 하는 경우가 있구나라는 생각으로 바뀌었다. 개인적으로 Brute Force 방식 중 가장 까다로웠던 것이 "조합과 순열"을 구현하는 것이었다. 원래는 이런 B..
코딩 테스트 시 필요한 이유 코딩 테스트 때 무조건 나오는 문제를 하나 고르라면 "문자열 문제"일 것이다.문자열 문제를 풀다 보면 마지막 Index부터 알고리즘 짜는 게 쉬워 역순으로 답을 구하고 구해진 답을 거꾸로 뒤집는 과정이 필요한 문제들이 몇 개 있었다. 이때 항상 "s.reverse()"라는 명령을 쓴다고 생각하고 사용하지만 Java에는 이런 명령이 존재하지 않는다.그래서 문자열을 뒤집을 때마다 항상 구글링을 해서 방법을 찾았는데, 문자열 문제는 항상 나오는 문제니 이번 기회에 정리해보기로 했다. StringBuilder 사용 String str = "sample"; StringBuilder sb = new StringBuilder(str); String reverse = sb.reverse()..
코딩 테스트 시 필요한 이유 코딩 테스트에 항상 나오는 문제가 있다. "~기준으로 정렬하여 반환하시오" 이런 경우 Arrays.sort()나 Collections.sort()의 기본적인 정렬 Rule인 Primitive Class(or Wrapper Class) 오름차순 정렬을 사용하면 참 좋겠지만 코딩 테스트에는 이런 날먹을 막기 위해 대부분 정렬 특수 조건을 추가한다. "A 기준으로 정렬하고, A가 같다면 B 기준으로 정렬하십시오" "A 기준으로 내림차순 정렬하십시오" 결국 이를 위해선 Java의 Compare 관련 메서드 및 인터페이스에 대해 알고 있어야 한다. 이전에 Stream을 공부할 때 sorted()를 사용하며 Comparator Interface를 람다식으로 잠시 사용한 적이 있었는데, ..
코딩 테스트 시 필요한 이유 사실 코딩 테스트 때 로그는 그렇게까지 중요도가 높지는 않다. 즉, 사용하지 않아도 문제를 풀 수 있다. 하지만 필자는 자릿수를 구하는 문제이거나 규칙을 가진 상황에서 특정 값의 Index를 구하는 종류의 문제들은 주로 log를 활용한다. 굳이 이렇게 풀지 않아도 되지만 수학을 좋아했던 예전 기억이 남아 있어서 이런 게 아닐까 싶다. 어차피 활용할 거 제대로 한 번 정리해보자고 결정했고, 이왕 정리하는 거 log의 반대 성질을 가진 거듭제곱까지 한 번에 정리하기로 하였다. Math.log Java에서 log를 사용하는 방법은 총 3가지 존재한다. 밑이 e(자연 상수)인 ln(x) 값을 반환하는 Math.log(x), 밑이 10인 log(x) 값을 반환하는 Math.log10(..
함수 호출 우리는 흔히 함수를 사용할 때 "함수이름()" 문구를 활용한다. 이렇게 함수 이름을 통해 특정 함수를 활용하는 것을 "함수의 호출"이라고 한다. 만약 호출한 함수가 Parameter를 가지고 있다면 우리는 함수를 호출하는 과정에서 인자를 전달해줘야 한다. 이때 인자를 전달하는 대표적인 방법이 Call by Value와 Call by Reference 방식인 것이다. 프로그래밍 언어별로 인자 전달 방식에도 약간 차이가 존재한다. Python에서는 Passed by assignment라고 불리는 Call by Value와 Call by Reference의 혼합 방식을 사용하며, Java는 Call by Value만 사용하지만 C 언어의 Call by Value와는 다른 동작 방식을 가진다. 일단 ..