반응형

알고리즘/프로그래머스 Level1 49

[프로그래머스,자바] Level1: 최소직사각형 (위클리 8주차)

문제분석 목표: 모든 명함을 넣을수있는 가장 작은 지갑 만들기 특수규칙: 명함은 회전할수있다. 전 이 문제를.. Set과 3차 반복문으로 40줄넘겨가면서 삽질하면서 풀었습니다... 가로와 세로에대한 틀에 너무 집중하시면 자칫하다 개고생합니다(하드모드). 가로: 두 변중에서 긴 부분 세로: 두 변중에서 작은 부분 이렇게 생각하시면 놀랍게도 정말 쉽게 풀리는 문제입니다. 그림으로 보실까요? 가로를 두 변중에서 가장 긴 부분으로 설정합니다. (모든 명함을 제일 긴부분으로 눕히는거죠) 세로를 두 변중에서 가장 작은 부분으로 설정합니다. 그후, 가로와 세로의 길이가 모두 들어맞게, Max(가로)와 Max(세로)를 설정하면 정말 쉽게풀립니다. 문제풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15..

[프로그래머스,Java] Level1:크레인 인형뽑기

https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제가 너무길다.. 이번문제는 링크로 띄우겠다. 문제분석: 인형이 담겨진 board와 크레인 이동 move가 입력으로 주어졋다. 크레인이 이동에따라서 인형이담긴 board를 위에서부터 뽑아서 바구니에다 넣을때, 바구니에 들어있는 인형이 2개가 겹치면 사라지게된다. 이 사라진 인형갯수를 세주는문제다. 문제풀이: 문제 그림을보면, 담아두는 바구니가 마치 스택의 자료구조와 흡사하다. 그래서 바..

[프로그래머스,Java] Level1: 소수 찾기

문제분석: 간단하게 1부터 n까지 소수인것을 판별해서 갯수를 반환해주는 문제다. 이 문제는 효율성을 포함하고있다. 너무 쉽다 생각하고 코딩하다가 효율성에 막히게된다. N이 엄청큰 수 100만이상의 소수라면, 혹시, 그 N을 2부터 100만까지 나누어지는지 연산을 100만번 반복시키지않았는가? 이걸 N, N-1,N-2... 까지 계속 반복시키다보면 엄청난 연산이필요하다. 소수판별은 2부터 100만까지 검사할필요가없다. 에라토스테네스의 법칙인 N의 제곱근까지만 판별해도 소수인지 드러난다. 예를들어, 소수 31을 판별하는데, 2, 3, 4, 5 까지만 판별해도된다. 문제풀이: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class Sol..

[프로그래머스,Java] Level1:없는 숫자 더하기

문제분석 0~9 중에서 주어진 numbers에서 숫자중에 없는숫자들을 더하는 문제다. 문제풀이 1 2 3 4 5 6 7 8 9 class Solution { public int solution(int[] numbers) { int answer = 45; for(int data:numbers){ answer-=data; } return answer; } } Colored by Color Scripter cs 너무나도 간단한 문제다 0~9까지 합은 45로 쉽게 도출되고, 45에서 한문자씩 빼주면 답이다

[프로그래머스,자바] Level1:위클리 챌린지 6주차 [복서 정렬하기]

문제분석: 복서간의 경기기록이 주어지고, 경기기록에의해 나오는 정보(몸무게, 승률,자신보다 몸무게가큰 선수와의 승리,번호) 를 이용하여 지정정렬하는 문제입니다. 이게왜 Leve1이지???; 문제풀이 지정정렬하기 위해선 각 복서마다 정보가 4개 (번호,승률,자신보다 몸무게가큰 선수와 승리수,몸무게)가 필요하다. 이걸 효율적으로 사용하기위해, 새로 Boxer클래스를 생성하고 4개의변수를 생성했다. 변수를 초기화하고, 생성자를 생성해 생성자주입으로 코딩하였다. 10~40줄까지 복서를 순회(1차반복)하면서, 4개의 정보를 저장하기위한 변수를 초기화한다. 복서의 승리기록(2차반복)을 순회하면서 승률과 자신보다 무거운복서를 승리한횟수를 저장한다. 반복이 모두끝나고 4개의 정보를구했다면, list에 Boxer를 저장..

[프로그래머스,자바] Level1: 위클리챌린지 4주차 [직업군 추천하기]

문제분석 문제 접근은 쉽지만 Level1치곤 구현난이도가 조금은 있는문제였다. 3중반복문을 써야하기때문이다. 문제는, Languages와 Preference를 줄테니, 선호도와 직업군 언어점수의 랭크를 계산해서 Max값을 Return 하는문제다. Max값이 중복이면 사전순으로 빠른직업군으로 정렬해서 출력. 문제풀이 문제를 풀기전에.. 우선 3중 반복문을 써야할것 같은데 라는 생각은 했다. 하지만 이런 생각하기전에, 더 효율적으로 짤순없을까라는 생각을 한번은 더해보는것이 중요하다. 그렇게 10~20분정도 생각하고 내 생각으론 어떤방법으로도 3중반복문을 거쳐야할거같아서, 그대로 구현하기로 했다. 개인적으로 빨리 코드 구현도 중요하지만, 어떻게 코드를 효율적으로 코드를짤지 고민하는시간이 더 중요한거같다. 결국..

[프로그래머스,자바] Level1:문자열 다루기 기본

문제분석 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성되어있으면 TRUE반환 그외에는 False를 반환하면 끝이다. 문제풀이 숫자로만 구성되어있는걸 아스키코드를 통해서 표현했다. 48~57사이들어있는 값이 숫자로댄 값이기때문이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { public boolean solution(String s) { boolean answer = true; char[] c =s.toCharArray(); if(s.length()==4||s.length()==6){ for(char data:c){ if(data=48){ answer=true; } else{ answer=false; break; } ..

[프로그래머스,자바] Level1: 문자열 내림차순으로 배치하기

문제분석, 풀이 문자열 s을 큰것부터 작은순대로 다시 정렬하면되는문제다. 아스키코드를보면 대문자 b.compareTo(a)); 로 람다식으로 표현도가능하다! 1 2 3 4 5 6 7 8 9 import java.util.*; class Solution { public String solution(String s) { String answer = ""; String[] a = s.split(""); Arrays.sort(a,Collections.reverseOrder()); return answer=String.join("",a); } } Colored by Color Scripter cs

반응형