f '분류 전체보기' 카테고리의 글 목록 (4 Page) — 하늘속에서IT

분류 전체보기

    [MariaDB] csv 형태로 저장된 필드를 조회하고 싶다면 사용하는 내장함수 FIND_IN_SET

    발단 외래키로 존재하는 값이 달라지지 않는다고 가정하고, 우리는 DB 를 설계할 때 종종 조회를 위해 외래키를 csv 형태로 가지는 field 를 설계한다. 이런 상황에서 조회할 때 사용하면 좋은 내장함수를 발견하게 되었다. 설명 만약 csv 형태로 값을 저장하는게 아니라면 field 에 특정구조를 가지게 한다. 예를들면 prefix, suffix 로 `|` 를 사용하는 것이다. 1,2,3 -> |1|2|3| 으로 저장하여 3을 조회하고 싶을 때 |3| 을 조회하면 된다. 위와 같은 구조도 상황에 따라서 사용하면 되지만, 처음에 csv 형태로 값을 저장하기로 하였기에 구조를 변경하고 싶지 않았다. 따라서, FIND_IN_SET 을 통해 문제를 해결하였다. 해결 FIND_IN_SET 은 두개의 파라미터를 ..

    [Spring Boot] RestTemplate 으로 ASP.Net 서버와 통신하려 할 때 특정 field 가 전송되지 않는 이슈(feat. Gson)

    발단 ASP.NET 이라고 규정할 수 없지만, 필자는 특정 서버와의 통신에서 왜 인지 특정 이유는 알 수 없지만 field 가 전달되지 않는 이슈를 겪었다. 설명 - 요청 메서드는 post 방식을 사용하였고 그에 따라 body 에는 객체를 담아 전송하였다. - body 객체는 String 과 List 을 포함하는 흔한 dto 이다. - 왜인지 ASP.NET 서버는 field validation 에 실패하였다는 값을 응답하였고 필자가 전송할 때 실수한게 있나 싶어 cURL 로 요청을 보냈을 때 요청은 성공적이었다. 해결 - 설명에서 언급한대로 여전히 정확한 이유에 대해서는 알지 못한다. - 그러나, cURL 로의 요청이 성공했다는 것을 근거로 객체의 serialize 과정에서 문제가 있을 수 있다고 생각하..

    [Nginx] 윈도우즈 환경에서 localhost 로 접근은 되는데 할당받은 ip 로는 접근이 안될때 (feat. ahn lab transaction)

    발단 nginx 를 다운받아서 실행하고, localhost 로는 접근이 가능하지만 할당받은 private ip 로는 접근이 불가한 어이없는 일이 발생하였다. 따라서 정리해보고자 한다. 과정 무려 3일이 걸려 알아낸 문제로써 3일 동안 걸릴 이슈는 아니라고 생각합니다. 1일차 - localhost 로의 통신을 확인하고, 외부에서 접근이 가능하게끔 방화벽의 특정 포트를 열어두고 접근이 가능하게끔 설정하였다. - 포트포워딩 까지 마치고 외부에서의 접근을 테스트 하는데, timeout 이 발생하였다.. 2일차 - 방화벽의 문제일 수 있다고 생각하여, 방화벽을 모두 내렸지만 여전히 동작하지 않았다. - 다른 문제는 찾아볼 수 없었고 컴퓨터를 재부팅해보지는 않았지만 여전히 동작하지 않았다. 3일차 - 데스크톱이 아..

    프로그래머스 :: 연습문제 :: 연속된 부분 수열의 합

    풀이 /** * 설명 * - 투 포인터 알고리즘을 사용하여 문제를 풀이하였다. * - 투 포인터 알고리즘은, 구간합을 구할 때 사용한다. * */ class 연속된_부분_수열의_합 { fun solution(sequence: IntArray, k: Int): IntArray { val answerList = mutableListOf() var sum = sequence.first() var start = 0 var end = 0 val sequenceSize = sequence.size while(end < sequenceSize){ /** * 설명 * - end가 sequenceSize와 같아졌을 때 sum이 k보다 작으면 더 이상 계산할 필요가 없다. * */ if(end == sequenceSize..

    프로그래머스 :: 연습문제 :: 무인도 여행

    풀이 class 무인도여행 { fun solution(maps: Array): IntArray { val answer = mutableListOf() val width = maps[0].length val height = maps.size val visited = Array(height) { IntArray(width) { 0 } } lateinit var twoDimensionTargetIndex: Pair /** * 설명 * - 지도의 모든 부분을 탐색한다. * * 동작예시 * - 조건1 : 방문하지 않은 곳 * - 조건2 : 섬인곳 * - 위 두 조건을 만족할때 dfs 를 통해 인접한 섬에 대한 음식의 갯수를 추출한다. * */ for (rowIndex in 0 until height) { for ..

    프로그래머스 :: 연습문제 :: 뒤에 있는 큰 수 찾기

    풀이 fun solution(numbers: IntArray): IntArray { val result = IntArray(numbers.size){-1} val stack = Stack() for(numberIndex in numbers.indices){ val compareNumber = numbers[numberIndex] if(stack.isEmpty()){ stack.push(Pair(numberIndex, compareNumber)) } else{ /** * 설명 * - stack 이 비어있을때 peek, pop 을 시도하면 EmptyStackException 이 발생한다. * - 따라서 while 조건문 내부에서 stack.peek() 를 바로 시도하게 되면 안된다. * - 그렇기 떄문에 s..

    프로그래머스 :: 연습문제 :: 테이블 해시 함수

    풀이 class 테이블_해시_함수 { fun solution(data: Array, col: Int, row_begin: Int, row_end: Int): Int { val sortedTuples = getSortedTuples(data, col, row_begin, row_end) val modValues = getModValues(sortedTuples, row_begin) val xorOperatedValue = getXorOperatedValue(modValues) println(xorOperatedValue) return xorOperatedValue } /** * 설명 * - 문제의 규칙에 따라 튜플을 정렬한다. * - row_begin, row_end 까지 배열을 잘라낸다. * */ pri..

    프로그래머스 :: 연습문제 :: 혼자 놀기의 달인

    풀이 class 혼자놀기의달인 { fun solution(cards: IntArray): Int { var answer = 0 /** * Parameters * - visited : cards 중 방문 기록용 * - numberOfCasesForNumberGroups : cards 중에서 `그룹`이 될 수 있는 경우의 수 * */ val visited = BooleanArray(cards.size){false} val numberOfCasesForNumberGroups = mutableListOf() /** * 설명 * - cards 중에서 방문하지 않은 index 추출 * -- 만약 모두 방문했다면(==-1) 모든 경우의 수를 확인했음으로 iteration 종료 * - 경우의 수 세팅(groupOfCa..

    프로그래머스 :: 연습문제 :: 점찍기

    풀이 import kotlin.math.* class 점찍기 { fun solution(k: Int, d: Int): Long { var count = 0L val dPowered = power(d) for(x in (0 .. d step k)){ count += getMaxYCoordinatesCounts(dPowered-power(x), k) } return count } /** * 설명 * - Math 패키지를 사용하고 싶지 않아서 만든 Math.pow 대체 함수 * - 문제에서 d 를 제곱하면 int 의 범위를 넘어감으로 Long 으로 반환하게끔 구현 * * 주의사항 * - `틀리게 된 함수` 사용시 `number * number`의 연산이 먼저 일어남으로 int 의 범위를 넘어가게되면 음수가 되..

    프로그래머스 :: 연습문제 :: 귤고르기

    풀이 class 귤고르기 { fun solution(k: Int, tangerine: IntArray): Int { var answer: Int = 0 var tmpK = k /** * 알고리즘 아이디어 * - 최소한의 갯수로 귤을 넘겨줘야 된다면 제일 많은 귤의 갯수부터 소진시키자. * * 설명 * - 귤의 크기에 맞게끔 Map 자료구조로 변형 * - 귤의 갯수로 치환한뒤 * - 크기의 역순으로 정렬한다. * * 부연설명 * - kotlin 은 다양한 변형함수를 제공함으로 적절히 사용하면 되겠다.(sorted().reversed() = sortedDescended()) * - 아래 경우에서는 정렬전에 size 로 transformation(map) 하는 과정이 더 빠르겠다 싶었다. * */ // val..