TIL

    [Java] 프로그래머스 Lv.2 : 위장

    https://programmers.co.kr/learn/courses/30/lessons/42578?language=java 코딩테스트 연습 - 위장 programmers.co.kr 풀이 경우의 수 계산법만 알면 간단히 풀 수 있다. 예를 들어, 상의 A개, 하의 B개가 주어진다면 서로 다른 옷의 조합의 수는 다음과 같이 계산할 수 있다. 상의든 하의든 1개만 선택해서 입는 경우 = A+B 상의1개 하의 1개 선택해서 입는 경우 = A*B 아무것도 입지 않는 수 = 1 최종 공식 = A+B+(A*B)+1 = (A+1)*(B+1) 하지만 우리는 아무것도 입지 않는 수는 빼줘야하기 때문에 최종적으로 -1을 해주도록 한다. HashMap에 key값으로는 의상의 종류, value로는 그 개수를 넣어줄 것인데,..

    [Java] 프로그래머스 Lv.2 > 조이스틱

    [Java] 프로그래머스 Lv.2 > 조이스틱

    https://programmers.co.kr/learn/courses/30/lessons/42860# 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 풀이 조이스틱의 이동횟수만 구하면되기 때문에, 상하와 좌우 이동을 따로 계산한다. 상하이동은 A-Z의 알파벳이 총 26개로 이루어져있기 때문에 중간알파벳인 N을 기준으로 이동횟수를 더해주면 되었다. N보다 작으면 A를 빼주고 N보다 크다면 Z에서 빼준뒤 1을 더해 계산한다. 좌우이동은 2가지를 고려해야한다. 계속 오른쪽으로 이동 : 이동횟수..

    [Java] 프로그래머스 Lv2 > 삼각 달팽이

    [Java] 프로그래머스 Lv2 > 삼각 달팽이

    https://programmers.co.kr/learn/courses/30/lessons/68645?language=java 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 풀이 위 삼각형을 2차원 배열에 넣는다고 생각하자. 배열에 차례대로 넣는 동작을 살펴보면 3가지로 나눌 수 있다. 세로(아래)로 이동 가로(오른쪽)로 이동 대각선(왼쪽위)으로 이동 실제로 배열에 적용하며 확인하면 다음과 같다. 세로(아래)로 이동 : a[0][0]=1 -> a[1][0]=2 -> a[2][0]=3 같이 첫번째 인덱스 +1 증가 ..

    [Java] 프로그래머스 Lv.2 > 전화번호 목록

    https://programmers.co.kr/learn/courses/30/lessons/42577?language=java 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 풀이 해시문제인데 아직 해시를 잘 모르겠어서 일단.. 마음대로 풀었다^^.. 처음에는 for문을 2번 돌려서 비교했는데, 효율성 테스트에서 실패가 떴다. => 배열을 먼저 sort(정렬)해주고, for문을 한번만 돌리도록 수정했다. ( ["119", "1195524421", "97674223"]와 같이 사전순으로 정렬되니, 앞 뒤로만..

    [Java] 프로그래머스 Lv.2 > 124 나라의 숫자

    https://programmers.co.kr/learn/courses/30/lessons/12899?language=java 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 풀이 3진법에서 1,2,3 대신 1,2,4를 사용한다고 생각하고 풀면 된다. 단, 주의할 점은 나머지가 0이 나올 때이다. 0 대신 4를 string에 추가해주고, 다음 몫으로 갈때 n에서 1을 빼고 계산해야한다. class Solution { public String solution(int n) { StringBuilder sb = new StringBuilder(); while(n!=0){ if(n%3==0) { sb.append(4); n = (n-1)/3; } else { sb.append(n%3); ..

    [Java] 프로그래머스 Lv.2 > 멀쩡한 사각형

    [Java] 프로그래머스 Lv.2 > 멀쩡한 사각형

    https://programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 풀이 대각선으로 잘리는 사각형 패턴은, 최대 공약수로 나눈 작은 사각형만큼 반복한다. 예를 들어 가로 8, 세로 12인 직사각형이면 가로세로를 각각 4(8과 12의 최대공약수)로 나눈 가로 2, 세로 3인 직사각형이 반복됨을 알 수 있다. 그 중 가운데에서 대각선으로 잘리는 사각형은 최대공약수인 4번 반복된다. 즉, 가로 2 세로 3인..

    [Java] 프로그래머스 Lv.2 > 가장 큰 수

    https://programmers.co.kr/learn/courses/30/lessons/42746?language=java 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 풀이 앞 뒤 문자를 직접 붙여보고 비교해서 푼다. 예를들어 30과 34면 3034와 3430을 비교해서 3430이 더 크므로 34, 30 순으로 내림차순 정렬을 해준다. 처음에는 삽입정렬 하듯이 for문을 2번돌려서 compareTo() 함수를 이용해 문자열을 비교했는데 런..

    [Java] 프로그래머스 Lv.2 > 큰 수 만들기

    https://programmers.co.kr/learn/courses/30/lessons/42883# 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 풀이 탐욕법(Greedy) 문제다. 어떤숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하기 위해서, 어떤숫자의 길이 -k번 만큼 for문을 돌려 가장 큰 숫자를 남겨 답으로 return해주었다. 정렬시간을 줄이는 방법! 숫자를 비교하던 도중 9가 나오면 더이상 비교할 필요가 없으니 break 해준다. k-1개까지의 숫자를 제거한 상태에서 1개의 숫자만 남았을때, 더이상 비교할 필요가 없으니 break 해준다 예를 들어 숫자 1924에서 수 두 개를 제거 한다고 하자. 그럼 첫번째로 192에서 가장 큰 수 9를 뽑는다...