코딩

private final List cheesesInStock = ...; /** * @return 매장 안의 모든 치즈 목록을 반환한다. * 단, 재고가 하나도 없다면 null을 반환한다. */ public List getCheese(){ return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } 위의 코드의 문제점은 null을 반환한다는 것이다. 재고가 없다고 해서 특별히 취급할 이유는 없는대도 말이다.. 만약에 재고가 없을 경우 null을 반환하는 것을 고집한다면, 이 메소드를 사용하는 모든 클라이언트는 아래와 같은 방어 코드를 넣어줘야 한다. List cheeses = shop.getCheese(); if(cheeses != ..
#10String이 주어지면, 중복된 char가 없는 가장 긴 서브스트링 (substring)의 길이를 찾으시오. // Input : "aabccbc"// output : 3("abc") 문자 list를 만든 후, for문을 돌며 문자를 추가한다. 같은 문자가 포함되어 있을시 list length를 구하여 maxLength보다 크면 maxLength교체 크지 않으면 현 maxLength를 유지한다. 1234567891011121314public static int solution(String str) { int maxLength = 0; List list = new ArrayList(); for(int i=0; i list.size() ? maxLength : list.size(); list.clear(..
#9 정수 배열(int array)이 주어지면 0이 아닌 정수 순서를 유지하며 모든 0을 배열 오른쪽 끝으로 옮기시오. 단, 시간복잡도는 O(n), 공간복잡도는 O(1)여야 합니다. 예제)Input: [0, 5, 0, 3, -1]Output: [5, 3, -1, 0, 0] Input: [3, 0, 3]Output: [3, 3, 0] 0을 오른쪽으로 옮기는 문제이다. 일단, 0이 아닌 수가 들어갈 index를 저장해 둔다.(배열 첫번째인 0부터 시작) 그 후 for문을 돌면서 0이 아닌 숫자가 나오면 해당 index의 숫자와 0이 아닌 숫자와 교환 후 index를 증가시킨다.(숫자가 0일 때는 index를 증가시키지 않아, index가 0의 위치를 가리키게 한다.) 1234567891011121314151..
#8 정수 배열(int array)이 주어지면 두번째로 큰 값을 프린트하시오. 예제)Input: [10, 5, 4, 3, -1]Output: 5 Input: [3, 3, 3]Output: Does not exist. for문을 한번 사용해서 풀어야 한다. 2번 째로 큰 수가 존재하지 않는 경우는 2가지가 존재한다. 원소가 2개가 안될 경우와 모든 원소가 같을 경우이다. 이 부분만 잘 처리를 해주면 쉽게 풀어갈 수 있다. 1234567891011121314151617181920212223public static int solution(int[] array) { if(array.length
#7 주어진 string 에 모든 단어를 거꾸로 하시오. 예제)Input: “abc 123 apple”Output: “cba 321 elppa” Input의 문자열을 문자단위로 나눈 후, 각 단어를 거꾸로 만들어서 새로운 문자열에 추가하면 쉽게 풀 수 있다.코딩테스트시 제공되는 편리한 API(함수) 사용이 제한이 될 수 있다하여, split와 문자열을 거꾸로 출력하는 reverse를 별도로 구현하여 만들었다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152package everyProgramming; import java.util.ArrayList; public class Ch07 ..
#6 간격(interval)로 이루어진 배열이 주어지면, 겹치는 간격 원소들을 합친 새로운 배열을 만드시오. 간격은 시작과 끝으로 이루어져 있으며 시작은 끝보다 작거나 같습니다. 예제)Input: {{2,4}, {1,5}, {7,9}}Output: {{1,5}, {7,9}} Input: {{3,6}, {1,3}, {2,4}}Output: {{1,6}} 리스트안에 리스트가 존재하여 어떻게 풀지 고민을 많이했었는데, 시작과 끝으로 구성된 클래스를 하나 구현해서 사용하니 쉽게 풀렸다.풀이법은 이렇다.1. 우선 {시작, 끝} 을 표현할 수 있는 Interval 클래스를 생성한다.2. List에 들어있는 Interval들을 {시작, 끝} 시작크기순으로 정렬한다. {{2,4}, {1,5}, {7,9}} => {{1..
#5정수 배열과 타겟 숫자가 주어지면, 합이 타겟값이 되는 두 원소의 인덱스를 찾으시오.단, 시간복잡도 O(n) 여야 합니다. 예제)Input: [2, 5, 6, 1, 10], 타겟 8Output: [0, 2] // 배열[0] + 배열[2] = 8 for문을 두번 돌려서 간단하게 풀려 하였으나, 시간복잡도가 O(n)이다. 하긴 중첩 for문 처럼 쉬운 문제는 나오지 않겠지.... 어떻게 할까 고민하다가 Map을 사용하기로 하였다.Map의 key에는 value(숫자) 값을 담고, value 에는 index 값을 담아서, value(숫자)에 해당하는 index를 추출하는 방식이다. Map(value, index)for문을 돌면서 target 값에서 해당 value(숫자)를 뺀 후, 그 값이 Map에 존재하면..
#4 정수(int)가 주어지면, 팰린드롬(palindrome)인지 알아내시오. 팰린드롬이란, 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말합니다. 단, 정수를 문자열로 바꾸면 안됩니다. 예제) Input: 12345 Output: False Input: -101 Output: False Input: 11111 Output: True Input: 12421 Output: True 코딩끄적끄적 게시판에 작성했던 팰린드롬 관련 알고리즘문제가 나왔다. 이 팰린드롬문제는 전에 포스팅했던 팰린드롬문제의 심화버전인 것 같다. 전 버전은 String(문자열)으로 되었기 때문에, 관련 메소드를 사용하여 손쉽게 풀었지만, 이번 문제는 int(정수)형 이기 때문에 관련 메소드를 사용할 수가 없다. (length 길이조..
매일프로그래밍을 구독하게 되었습니다. (https://mailprogramming.com/) 매주 월요일날 간단한 코딩문제가 메일로 전송됩니다. 아직까진 무료이나.. 조만간 유료로 전환된다고 하네요..? 항상 연습해야지 공부해야지 하고 중간에 포기를 많이했었는데, 일주일에 한번와서 고민도 해보고 코딩연습도 하고 좋은 것 같네요 ㅎㅎ #1 정수 배열(int array)가 주어지면 가장 큰 이어지는 원소들의 합을 구하시오. 단, 시간복잡도는 O(n). 예제} Input: [-1, 3, -1, 5] Output: 7 // 3 + (-1) + 5 Input: [-5, -3, -1] Output: -1 // -1 Input: [2, 4, -2, -3, 8] Output: 9 // 2 + 4 + (-2) + (-3..
깡냉쓰
'코딩' 태그의 글 목록