반응형

알고리즘 183

[프로그래머스,자바] Level2: 124 나라의 숫자

문제분석 124 나라는 1,2,4 로만 사용하여 수를셉니다. 우리가 일상생활에서 쓰는 10진법은 숫자 0~9인 숫자 10개를사용하여 수를 나타내니 '10진법'입니다. 124나라는 1,2,4인 숫자 3개로만 사용하여 수를 나타내니, '3진법'과 같은원리로 움직입니다. 근데, 보통 3진법은 0부터세는데, 이 문제는 1부터셉니다. 그냥 3진법을 갖다 붙히면 오류가 발생합니다. 예시로, 6 : 14 , 9: 24 를 실행하면, 6=42 9=44 로 출력이됩니다. 4,5,7,8,같은 숫자들은 의도대로 잘나오지만, 3의배수만 의도대로 나오지않습니다. 이 문제를 해결하기위해선, 3의배수를 확인한뒤, -1를 하면 문제의 의도대로 출력이가능합니다. 문제풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15..

[프로그래머스,자바] Level2: 빛의 경로 사이클

문제분석: 이 문제는 Level3정도 줘도 대는문제다. 로직설계도 어려운데다가, 구현난이도도 어렵다. 격자마다 빛을쏘는 통로가 4개 존재한다. 격자마다 그림을 보고, 빛을받는통로까지 8개를 구현할 필요가없다. 이 문제의 빛은 범위를 넘어간다면, 반대편쪽으로 빛이 돌아오므로, 빛을 쏘는 통로만 확인한다면, 빛을 받는통로는 확인할필요가 없다. 목표는 빛의 사이클이 나오는 모든경우를 반환하는것이다. 빛의 사이클이 되는건 어느 한 통로로 빛을쏜뒤, 이미 방문한 통로를 만나면 하나의 사이클이다. 빛의 사이클을 찾으러면 모든 통로를 한번쯤은 쏴봐야한다. 즉 3차반복을돌려야한다.[모든행,모든 격자, 4개의 통로] 로직이 돌아가는 형태다. 자세한 구현은 문제 풀이에서 해설하겠다. 문제풀이: 격자마다, 4개의 통로(위,..

[프로그래머스,자바] Level2:멀쩡한 사각형

문제분석 문제를 이해하기는 매우쉽다. 대각선으로 선을 그은뒤, 잘라진 사각형을 제외한다. 그런데, 잘라진 사각형을 어떻게 계산해야하는지 정말 막막하다. 무슨 특수한규칙이 있을텐데, 제로베이스로 그 규칙을 떠올리긴 매우 힘들다. 작성자는, 규칙을 발견하지못해서 참고자료를 검색하고 보면서 풀었다. 8X12 사각형을 잘려나간 사각형의 모양을 자세히보면, 같은모양이 4번 반복된다. 이 반복되는 횟수가, 가로와 세로의 최소공배수의 횟수만큼 반복한다. (최소공배수 구하는 로직은 유클리드 호제법을 참고하세요!) 반복되는 모양의 갯수는 (가로/최소공배수)+(세로/최소공배수)-1 만큼의 갯수다. 전체 갯수- (최소공배수)*((가로/최소공배수)+(세로/최소공배수)-1)가 답이다. 문제풀이 1 2 3 4 5 6 7 8 9 ..

[프로그래머스,자바] Level2:오픈채팅방

https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제분석 문제가 긴 이유로 링크로 대체합니다. 누군가 들어오면 [닉네임]이 들어왔습니다. 를 출력합니다. 누군가 나가면 [닉네임] 나갔습니다. 를 출력합니다. 누군가가 채팅방에서 닉네임을 바뀌거나 , 나간후 새로운 닉네임으로 들어오면 닉네임이 변경됩니다. 닉네임은 중복이 가능하며, 중복된 닉네임은 입력 Record로 주어진 id로 구분합니다. 결과는 모든 Rec..

[프로그래머스,자바] Level2: 문자열 압축

문제분석 규칙에따라 압축을해줘서 문자열의 길이를 반환하는 문제입니다. 규칙이 1개 2개 3개...단위로 잘라서 압축합니다. 1개 2개 3개..단위로 자른 문자열중 가장 짧은 경우의 길이를 구합니다. 구현난이도가 조금 낮은게, abcabcdede의 압축결과가 2abcdede가 답이듯이, 3개 단위로 잘라도, dede를 압축할 필요가없습니다.(3개단위는 무조건 3개단위) 문제풀이 1개 2개 3개..단위마다 압축한 문자열의 길이를 저장하는 result배열 선언과 1개 2개 3개..단위마다 자른 문자열을 담아내기위한 str리스트를 저장합니다. str리스트를통해서, 자른문자열이 압축이 가능한지를 판별합니다. 첫번째 큰 반복은 1~ 문자열s의 절반만큼 반복합니다. (X개 단위 반복) 13~20라인의 2차반복은, 단..

[프로그래머스,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에서 한문자씩 빼주면 답이다

[프로그래머스,자바] Level2: 위클리챌린지 7주차 [입실 퇴실]

문제분석: 처음 읽고 이게 뭘 구현하란거지? 5번은읽어봤다. 정리하자면, 입실시간기록과 퇴실시간기록이 없는 그냥 "순서" 만 있는 배열 Enter와 Leave가 주어졌다. 순서를 보고 각 사람이 반드시 만나는 사람의 수를 구하는문제다. 근데 순서만보고 각 사람이 반드시 만나는 경우가 도대체 무슨소리며, 도대체 어떤 경우인가? 바로, 모두가 들어오자마자 바로 나갔을경우다. 모두가 들어오자마자 나갔는데도, 만난경우가 있다면 기록에 상관없이 무조건 만난다 예시로 입실순서 [1,4,2,3] 퇴실순서 [2,1,3,4]를 예시로 보겠다. 1. 1번이 입실했다. 하지만 퇴실순서가 2번이 먼저니 방에 남는다. room[1] 2. 4번이 입실했다. 하지만 퇴실순서가 2번이 먼저니 방에 남는다. room[1,4] (두 사..

반응형