본문 바로가기

코딩테스트 연습

(31)
[JAVA/알고리즘] 3진법 뒤집기 내 풀이 ArrayList로 뒤집은 3진법을 담았고, 다시 반복문을 통해서 10진법으로 만들어주었다. import java.util.*; class Solution { public int solution(int n) { int answer = 0; ArrayList ternery = new ArrayList(); while (n > 0) { ternery.add(n % 3); n /= 3; } for (int i = ternery.size()-1; i >= 0; --i) { answer += ternery.get(i) * Math.pow(3, ternery.size()-i-1); } return answer; } } 다른 풀이 반복문은 진법 관련해서 매번 보던 패턴이라 익숙했지만, StringBuilde..
[JAVA/알고리즘] 다트게임 - 내 풀이 문자열을 char 배열로 만든 후에 처리했다. 처음에 10이 있는 걸 간과하고 하나씩 봤는데 10 때문에 하나씩 보는게 어려웠다. 10인 경우만 따로 빼기엔 복잡해질 것 같아서 문자가 나올 때까지는 숫자에 더하게 했다(score 변수). 중간중간 자꾸 범위 초과 에러가 떴는데 나조차도 헷갈려서 향상된 for문을 사용했더니 오류가 사라졌다. 왜 그랬는지는 아직도 의문.. import java.util.*; class Solution { public int solution(String dartResult) { char[] dart = dartResult.toCharArray(); int[] scoreArr = new int[3]; int round = 0; String score = ""; fo..
[JAVA/알고리즘] 문자열 내림차순으로 배치하기 https://programmers.co.kr/learn/courses/30/lessons/12917 코딩테스트 연습 - 문자열 내림차순으로 배치하기 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 programmers.co.kr 문자열을 배열로 바꾼 다음에 정렬을 통해서 알파벳 순서대로 만들었다. 이후에 배열 순서대로 다시 문자열에 넣었다. 예전에는 아스키코드 생각하고 그랬는데, 그냥 크기 비교만 해도 되는 걸 너무 복잡하게 생각했던 것 같다. import java.util.*; class Solution { public String solution(Stri..
[JAVA/알고리즘] 이상한 문자 만들기 https://programmers.co.kr/learn/courses/30/lessons/12930?language=java 코딩테스트 연습 - 이상한 문자 만들기 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 programmers.co.kr 내 풀이 class Solution { public String solution(String s) { String answer = ""; boolean isOdd = false; // 홀수번째인가 for (int i = 0; i < s.length(); ++i) { char ch = s.charAt(i); if (ch == ..
[JAVA/알고리즘] 완주하지 못한 선수 HashMap을 사용했고, 모든 참가자를 HashMap에 넣은 다음에 key를 Integer로 줘서(넣을 때마다 1씩) 완주한 선수인 경우에 1씩 줄여주었다. 처음엔 boolean으로 줘서 완주하면 true로 바꿔준 다음에 유일한 false만 반환하려 했으나 동명이인 문제로 그냥 0, 1, 2 이런 식으로 관리하였다. 처음에 선수를 넣을 때 +1씩 증가하게 했더니, 원래 HashMap이 없어서 새로 생성해야하는 경우 NullPointer 에러가 나길래 조건문을 추가했는데, 다른 사람들 풀이를 보니까 getOrDefault라는 메소드를 사용해주었다. 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드라고 한다. 아래 참고했던 블로그 링크를 첨부한다. 다른 풀이 중에 두 배열을 ..
[TroubleShooting] 해쉬맵(HashMap)에서 순서가 바뀌는 문제 카카오 문제인 [신고 결과 받기] 문제를 풀기 위해 HashMap을 사용했는데, 분명 배열에서 값을 받아와 먼저 HashMap의 key 값을 지정해준 후, iterator을 이용하여 다시 해쉬맵을 출력했더니 순서가 뒤바뀌는 문제가 발생했다. 문제를 설명하기 조금 어려운데, 분명 a-b-c-d순서로 값을 넣어줬는데(put 이용) iterator를 이용해 해쉬맵을 출력했더니 순서가 이상해지는 문제가 생겼다. 검색해보니, HashMap이 원래 그렇다고 한다.. 입력된 순서를 지키고 싶으면 그냥 HashMap이 아니라 LinkedHashMap을 써줘야한다.
[JAVA/알고리즘] 나머지가 1이 되는 수 찾기 https://programmers.co.kr/learn/courses/30/lessons/87389?language=java 코딩테스트 연습 - 나머지가 1이 되는 수 찾기 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 입 programmers.co.kr 내 풀이 class Solution { public int solution(int n) { int answer = 0; for (int i = 1; i
[JAVA/알고리즘] 정수 제곱근 판별 💡임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 🖥 나의 풀이 class Solution { public long solution(long n) { long sqrRt = (long)Math.sqrt(n); if (sqrRt * sqrRt == n) { return (sqrRt + 1) * (sqrRt + 1); } else { return -1; } } } 🖥 다른 풀이 class Solution { public long solution(long n) { if (Math.pow((int)Math.sqrt(n), 2) == n) ..