\-> 문자열 치환할 때 쓰이는 replace()를 사용하여 한 줄로 풀 수 있는 방법이 있었다.https://velog.io/@chosj1526/JAVA-문자열-치환-replace-사용법예제
emergency의 값을 복사해둔 배열을 하나 더 만들고, 그 배열을 정렬하고 순서대로 해당 값이 emergency에서 어디있는지 탐색하는 로직을 사용했다.정렬, 탐색... 너무 비효율적인 로직같아서 다른 풀이를 찾아봤고, 이런 방법을 기억해야할것같아 기록한다.훨씬 깔
반복문을 3번 이용해서, 조금 시간복잡도가 비효율적으로 나올것같았다.그리디 알고리즘처럼, 어떤 조합을 최소한으로 생각할때 수학적으로 몫과 나머지를 생각해보자!조합의 가지수를 적게가져가고싶을때는 가장 큰 수부터 몫을 정답에 더해주고, 기준 값을 나머지로 업데이트하며 진행
여러 테스트케이스에서 틀렸는데, 모르겠어서 질문게시판을 조금 찾아봤다.이런 힌트를 얻을 수 있었다. (감사합니다!)n개의 연속된 정수에는 항상 n의 배수가 포함되기 때문에 항상 정수 값이 나와서 부동소수점 문제를 피할 수 있습니다.\-> 이 문장이 핵심 포인트이다!몇개
이중 for문을 이용하는거나 row변수를 하나 더 사용하는거나 조금 비효율적이라는 생각이 들어 다른 풀이를 찾아봤다.나누기와 나머지로 표현 가능함을 기억하자!!!
for문을 사용하고, if문으로 조건을 5개나 체크하는게 코드가 너무 지저분하다는 생각이 들었다.해당 조건에 맞는 문자 전부를 치환해주는 replaceAll()을 사용하면 한줄로 깔끔하게 풀 수 있다!replace()와 replaceAll()의 차이점은 매개변수이다.r
내 코드가 그렇게 나쁜것같진않지만, 코딩할때마다 내가 사용하는 것들이 한정적이라는 생각이 많이 들기때문에, 다른 풀이를 익히려고한다.stack 자료구조를 이용한 풀이가있다. 웹 뒤로가기, 역순문자열, 실행취소.. 같은 것에 선입후출의 스택을 활용할 수 있다.
항상 if-else를 사용하는데 다른 풀이를 보니 삼항연산자를 사용해 한 줄로 요약할 수 있어서 가져왔다.앞으로 if-else의 실행문이 각각 한줄이면 간단하게 삼항연산자를 사용해보자!!
for문을 돌면서 Character.isDigit()을 사용해 문자 하나씩 숫자인지 판단해, 숫자면 더해주는 로직을 사용했다.replaceAll()을 사용했다. 정규표현식이 첫번째 매개변수로 들어간다.0-9 = 0부터 9까지의 숫자를 모두 "" 로 변환한다.(없애는것과
너무 길고, 지저분하다.. 다른 풀이를 보고 배우자다른 풀이 둘 다 replaceAll()을 사용했다!뭔가 특정 원소 삭제, 대체.. 같은경우 replace를 생각하자!!!
내가 몰랐던 함수를 사용했거나, 간결해보이는 다른 풀이를 가져왔다.배열에 넣어서 인덱스로 교환해줘도 된다. 그럼 반복문 필요없다.여기서 몰랐던건, String.valueOf()의 파라미터로 배열이 들어가도된다!! list에서 swap연산을 사용해서 풀수도있다! Stri
내가 알파벳배열만든게 너무 길다고 생각했는데, 다른풀이를 구경하다가 괜찮은 풀이가 보여서 가져왔다.숫자 배열의 인덱스별로 알파벳이라 생각하고, 해당 알파벳이 나올때마다 해당 인덱스의 값을 +1해주는 방식을 사용했다.
잘 풀었는데, 다른 풀이가 한줄로 요약되어있기도하고, 문자열 + int = 문자열 자동변환을 생각하지 못해서 공부한다.str.indexOf(char ch) / str.indexOf(String strvalue)indexOf()로 파라미터의 첫번째 위치를 받을 수 있다.
항상 배열로 반환해야하는데, 배열은 처음에 사이즈를 지정해야하니 사이즈를 알 수 없어 List에 따로 담아 배열로 다시 옮기는작업해야할 때 번거로워진다.리스트를 배열로 변환하는 toArray()가 있지만, List는 Integer타입으로 생성해야하고, 배열은 int타입
Math.pow()의 입출력은 모두 double형이다... 몰랐던 사실!
배열에 넣어서 배열을 정렬하는 방법을 생각못했다!그리고 배열을 문자열로 변환하는건 조금 생소하다.new String(arr)로 바로 변환이 가능하다!
Math.sqrt()를 썼을 때 딱 떨어지지않는 경우에도 (소수점이하 수가 있을 경우) 그 수가 그대로 반환된다.그럼 이 반환값의 타입을 판별할까..싶다가 Integer은 함수를 써서 판별할 수 있다지만, int타입은 타입 판별을 어떻게 해야할지 모르곘어서 이런 로직을
if문으로 범위를 넘었는지 체크하는게 중복되니 좋지않은 코드같다.일단 삼항연산자를 x = z - y ? t : f 이런식을 쓸 수 있다. now\[0] -= now\[0]>-(board\[0]/2)?1:0따라서 이걸 이용해서 이동할때마다 체크한다. 삼항 연산자를 어떤
두 군데에서 해맸다.원인 1우선 x의 계수가 무조건 0~9까지로 한자리수일거라는 생각을 잘못했다.그래서 헤맨부분1을 처음에는 if(temp\[i].length() == 2) var += temp\[0]-'0';로 썼다가 몇몇 테스트케이스에서 틀리는 일이 발생했다. 계수
replaceAll()과 split()를 이렇게 응용해서 쓸 수 있구나.그리고 숫자가없으면 s에 ""가 들어가기때문에, answer에 숫자를 더하기전에 if(!s.equals(""))로 조건문을 걸어야한다. 그렇지않으면 NumberFormatException이 난다.
풀이의 문제는 아니고, 이렇게 삼각형 완성 조건이 나올때 예시를 보지않으면 100% 풀지못했을 것같아서 외울겸 정리한다.우선 상각형은 기본적으로 가장 긴 변이 나머지 두 변의 합보다 작아야한다.문제에 두 변의 길이만 주어진다면, 새 가지 상황을 볼 수 있다.주어진 두
다른 풀이를 보니, 코드가 더 깔끔하기도하고 시간 복잡도나 공간복잡도나 조금이라도 덜 사용하기때문에 다른 코드를 공부한다. 향상된 for문을 사용해 코드를 더욱 깔끔하게 작성할 수 있다.기준(바깥 for문)을 사전으로해서 하나씩 spell의 값이 포함되어있는지 체크하며
gcd구하는것까지는 좋았으나 오일러피사용해서 1~n사이의 소수를 구한 후, 해당 소수로 다 나누어보는로직은 비효율적이라는생각이들어 다른 풀이로 공부한다.우선 gcd를 구해서 진행하는건 동일하다(gcd의 로직은 동일하지않음. 유클리드 호제법으로 진행할 것)기약분수가 되면
이 문제는 조금 어려워서 다른 사람의 풀이를 보고 풀었다. 구현if문을 통해 세 선분을 비교해도 풀 수 있으나, 아이디어만 잘 세우면 그냥 배열에 카운팅만 해서 구현해주면 된다.선분의 수치는 -100~100 이다. 수치를 +100씩 해준다면 0~200 범위가 된다. 따
처음에 두 점씩 이어서 선분을 만드는 경우의 수를 잘못계산했다.총 점이 4개이기떄문에, 4\*3=12. 즉 12가지 경우의수가 있을거라생각하고 진행했다가 틀렸다.위 로직대로하면 말이안된다. 예를들어 점 a,b,c,d가 있을때 a-b, b-c 이렇게 연결되는 경우가있기때
특정 메서드를 사용하기위해서 주어진 배열을 리스트로 변환해야하는데, 이 부분을 stream을 이용해 한 줄로 진행하려하면 매번 그랬듯이 뭔가 막혔다. 그래서 반복문을 사용해 값을 그대로 대입해주고 난 후 진행했는데 특정 테스트케이스에서 틀렸다. 이유를 모르겠어서 다
다른 풀이를 찾다가 반복문을 한 번 덜 쓰고 로직도 깔끔한 것 같고 배울점이 있는 코드를 발견해서 공부한다.향상된 for문 이용해서 2차원 배열을 1차원배열로 받을 수 있음 점수를 정렬한 후, 해당 값의 가장 처음 인덱스를 반환하는 indexOf를 이용해서 등수를 매길
예를들어 replace("aya", "")로 하면, 만약 "yayae"라는 문자열이 있을 때 가운데 aya가 사라지고 "ye"가 남게되어 replace("ye", "") 도 진행되는게 문제였다.하지만 이 코드에서 아주 살짝 생각을 틀어 잘 풀었다. 해당 문자열을 빈값으
이렇게저렇게 풀다가, 조금 헷갈리는데 그 부분이 해결이 안돼서 다른 풀이를 보고 공부했다.결국 보너스로 받은 치킨뿐만아니라 남은 쿠폰의 수까지 chicken으로 업데이트해주면되는것이었다.대신 답은 보너스로 받은 치킨의 수만 넣어주지만, 남은 쿠폰의 수도 치킨을 시키고
나는 1번 밀고, 같지않으면 한번 더 밀고, .. 반복해서 결국 가능한 경우의수를 다 해보는 로직을 짰다.다른 효율적인 풀이가 분명 있을 것이기에 다른 사람들은 어떻게 풀었는지 궁금해졌다.배울만한 다른 코드를 가져와봤다.repeat() : 반복나열해주는 메서드. 파라미
나는 이게 연속된 수의 합이라서 처음에 투 포인터 알고리즘을 생각했다.하지만 기준 배열의 시작점을 어떻게 잡아야할지 도무지 감이오지 않았다.그래서 접근법을 찾아보았다.기본형 : 1,2,3,4,5 -> num = 5, total = 15오른쪽으로 한칸 이동 : 2,3,4
대소문자 구분이 없다했으니, 문자열을 모두 대문자 혹은 소문자로 바꾼 후 진행하면 깔끔하다.
처음에 주어지는 수 x가 int범위를 넘은 long타입일 수도 있는데, int temp = n으로 선언해서 테케 마지막 2개에서 틀렸었다.코테에서 정수타입을 사용하면 long타입으로 선언하는 습관을 들이고, 범위가 적절한지 꼭 체크하자!! 따로 변수를 선언하지않아도 배
'-'가 들어오면 NumberFormatException이 날까봐 -를 빼주고 숫자로 형변환 할 수 있도록 작성했다.'-'가 숫자로 형변환할때 NumberFormatException이 날지안날지 궁금해져서 그냥 뭐가됐든 바꿔보는코드도 작성해봤다.'-' 문자는 정수로 형
다양한 메서드를 사용해 한결 간단하게 구현했다.내림차순으로 정렬하는 Arrays.sort(arr, Collections.reverseOrder());를 쓰려면 byte, char, double, short, long, int, float같은 PrimitiveType의
답이 항상 true로 나온다.문제는 마지막에 if문으로 답이 false인지 체크할때 x변수를 사용해야하는데, while문에서 x /= 10으로 x를 계속 업데이트하는것이었다.반복문에서 사용하는 변수와 반복문 나와서 사용하는 변수를 구분했다.
1~n까지의 합 공식 = n\*(n+1)/2 를 썼다가 음수를 처리못해서 틀렸고 결국 그냥 반복문을 사용했는데 혹시 수학적으로 다른 풀이가있을까 살펴봤다.a가 b보다 큰 수 일때 처리하는 코드도 훨씬 간단하다. swap로직대신 메서드를 사용했다.Math.min()과 M
테스트케이스3이 계속 틀렸다.\-1 이 나와야하는데, 나는 488이 출력되어서 뭐가 문제인지 모르겠어서 힌트를 찾아봤다.처음에는 long타입의 변수를 사용하지않고 계산을 그대로 num에 누적했었다.계산을 하다보면 int 타입 범위를 넘어갈때가있는데 그 부분을 고려하지
코드가 조금 지저분한것같다..우선 이렇게 int\[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray(); stream을 이용하고 다시 배열로 바꾸는 식을 잘 공부해둬야겠다.또한 이
UPDATE command denied to user 'USER477690B76A6BE7122B5F00FCE2'@'172.31.27.227' for table 'food_warehouse' 가 발생한다.코테에서는 당연히 원본데이터를 조회만할 수 있기때문에 권한이 없다.
나쁘지않은 코드라 생각되지만, 다른 풀이를 구경해봤다.일단 모든수가 양수이고 각 수가 모두 최대치일때를 고려해봐도 1,000 \*1,000 이므로 int범위내에서 가능하다.long타입으로 습관들이는건 좋지만, 연산을 위해 불필요한 변수 하나를 더 사용했다.또한 if-e
배열을 내림차순으로 정렬하려면 인자로 Collections.reverseOrder()을 넣어야하는데 이를 위해서는 배열 타입이 int가 아닌 Integer이어야 한다.그런데 Integer타입은 (char)을 이용해서 문자타입으로 캐스팅하지 못한다. 그래서 (char)(
예외처리를 이용해서 문제를 풀 수도 있다.생각도 못했다.정규표현식을 이용할 수도 있다.정규표현식을 이용하는데, 조금 더 간단히 이용해서 split에 이용할수도있다. 숫자로만 구성되어있다면, 숫자기준으로 split할 경우 결과 배열에 들어가는건 아무것도 없을거다. 따라서
10진수에서 3진수로 나눗셈연산과 나머지연산을 이용해 구하다가, n진수에서 10진수로 변환해주는 메서드가 생각나서 찾아보고 그렇게 진행했다.그러다 문득 10진수에서 3진수도 메소드를 이용해 바꿀 수 있지않을까싶어 찾아봤다.10진수를 제외한 나머지 진수는 String으로
처음에 몇몇 테케에서 틀렸는데 원인을 알 수 없었다.알고보니, 공백이 하나 이상일 수 있는데, 결과문자열에서 이 공백개수를 그대로 재현해야하는부분을 놓쳤었다.나는 결과 문자열에 공백이 하나만 끼도록 했었던것이다.공백 개수를 동일하게 가져가기위한 코드가 지저분하다는 생각
(ch - 'a' + n) % 26 + 'a' 와 (ch - 'A' + n) % 26 + 'A' 같은 식에서 배울게 있어보인다.나머지 연산을 잘 기억해야겠다.
투포인터도아니고, 슬라이딩 윈도우도 아니고 변형문제인가.. 고민했다. 그래서 해설을 조금 찾아봤다.아주 간단한 문제였다.삼중 for문을 사용하면되는거다.
처음에 어떻게 풀어야하나 막막했다.가로와 세로의 최대길이와 각각 인덱스를 저장해둔 후, 원래 케이스와 각각 뒤집었을때에도 서로의 최대를 넘지 않는지, 둘 다 같이 뒤집었을때는 어떨지 이렇게 총 4개의 케이스로나누어서 생각해야하나 코드가 너무 지저분해지는데 고민하다가 이
먼저 10진수를 2진수로 바꾸는 메소드는 아는데, 이걸 처음에는 byte 타입 배열에 저장해야하나?하고 잘 못 생각했다.Integer.toString()을 사용해서 10진수를 n진수로 바꿀 수 있는데, 반환값의 타입은 String이다. 하지만 이렇게했을 때 문제가 생겼
💁♀️ 시뮬레이션, 구현최솟값을 찾는것과 swap연산의 순서가 바뀌었어야했다.swap을 먼저 수행해놓고, 최솟값을 찾을 때 numbernextRow을 파라미터로 넣어서 비교하고있었으니 비교 데이터가 정확히 안들어가는게 문제였다.선후관계를 변경했다.최솟값 먼저 찾은
🙋🏻♀️ 문자열공개된 테스트 케이스는 다 통과했는데, 제출해보니 일부 히든 테스트 케이스에서 런타임 에러가 발생했다. 원인이 잘 파악되지 않았다.'질문하기'를 통해 힌트를 얻은 결과, 범위문제라고하더라..그래서 주어진 제한사항을 다시 잘 살펴보니, p와 t의 숫자
구현으로 풀 듯이 하려다가, 이게 DFS/BFS 유형인걸 알고 풀었기때문에 어떻게 사용될지를 생각해봤다.금방 DFS 라는것은 알 수 있었으나, 재귀적으로 어떻게 호출해야할지 감이 안왔다.깊이랑 합까지 파라미터로 넘긴다! (이 생각 전혀 못 함)그리고 다른 풀이를 찾아봤
🙋 BFS 이용!레벨:2BFS 문제를 오랜만에 풀어서 그런지, BFS인게 감은 오는데 어떻게 풀어야할지 모르겠더라.다른사람들의 풀이(코드말고)를 보고 짰다.내가 처음에 기억 못하고 놓쳐서 헤맸던 부분은 이거다.보통 사방으로 이동하면서 해당 값을 넣는데, 여기서는 어떤
처음에 이 문제를 어떻게 풀어야할지 감이 안왔다.phone_book에서 2개의 원소(a,b라고 가정)를 고르는 2중 for문에, 한 번 더 문자열(b)의 길이만큼 반복하면서 잘라낸 문자열이 가장 바깥 문자열과 일치하는지 검사하는 코드를 슈도코드로 짜봤는데,, 이렇게하면
🙋 Hash 사용! 왜 Hash일까? 중복을 허용하지 않는 자료구조이기때문!이 문제가 해시로 분류되는것은 알고있었지만, HashMap을 쓴 후 어떻게할까를 고민했다..우선 중복을 허용하지 않는 키에 포켓몬 번호를 넣고, 조합 알고리즘을 사용해 경우의수를 보면서 종류의
partici.get(0);이 undefined로 나올때도 있는데, 해시 사이즈를 보니 1이긴하네?아 get()은 Key값으로 찾는거구나..나는 인덱스를 넣고있었다.values()로 value만 뽑아서, Iterator를 사용했다.원소는 무조건 하나밖에 없을것이므로,
💡 Hash 사용!해시를 사용하긴하는데, 모든 조합의 경우의 수를 어떻게 구해야할까? 고민했다.조합 알고리즘을 사용하려했는데, 시간복잡도가 '2^30\*30'이라 이건 아니다싶었다.결국 다른 사람이 어떻게 풀었는지 힌트를 살짝 얻었다.특별한 알고리즘이 있는건 아니었고