목록자바 (16)
렝무식

Programmers - [64061] 크레인 인형뽑기 게임 🖍 크레인을 작동시킨 후 터트려져 사라진 인형의 개수를 출력하는 문제 (link) 64061 (2019 카카오 개발자 겨울 인턴십) 크레인 인형뽑기 게임 (Lv.1) [풀이 과정] '맨 위의 인형을 뽑고, 차례대로 넣고, 터트린다.' 라는 사실을 통해 어떤 자료구조를 사용해야 할 지 감을 잡을 수 있다. 스택을 사용하면 간단하게 풀 수 있는 문제. 스택은 대표적인 후입선출(LIFO) 자료구조이다. 인형들이 담긴 격자 정보가 들어있는 2차원 배열 변수 board[][] 가 있고, 크레인의 위치가 저장된 배열 moves[] 가 있다. 우리는 moves에 저장된 숫자를 열 번호로 지정하여 크레인을 가로로 움직이고, 격자에 든 인형을 보기 위해 boa..

Programmers - [42889] 실패율 🖍 게임의 각 스테이지의 실패율을 구하여 내림차순으로 스테이지 정렬 후 출력하는 문제 (link) 42889 (2019 KAKAO BLIND RECRUITMENT) 실패율 (Lv.1) [풀이 과정] 다른 포스팅보다 스크롤이 조금 더 길다. 🥺 카카오 코테 답게 문제 이해가 쉬운 편은 아니다. 물론 카오코테 1번 문제 수준으로 그다지 어려운 문제는 아니지만, 2년 전의 나는 못 풀었고 조금 도움을 받아 코드제출만 했었다. 그래서 지금 포스팅하는 시점에서 다시 이해하고 풀이를 적고 있다. 문제에서 정의하고 있는 개념을 먼저 설명해보겠음. 우선 입력값에 대해서 말해보자면 N = 스테이지 개수이며, 입력으로 주어지는 stage 배열은 [index = 플레이어 번호,..

Programmers - [81301] 숫자 문자열과 영단어 🖍 숫자와 영단어가 혼합된 문자열을 모두 숫자로 변환하여 반환하는 문제 (link) 81301 (2021 카카오 채용연계형 인턴십) 숫자 문자열과 영단어 (Lv.1) [풀이 과정] 내가 푼 방법이 효율적이지 않다는 점을 감안하고 시작한다. 결론부터 말하자면 s를 모두 숫자로 변환한 뒤 StringBuilder에 문자열 형태로 저장해둔 후 int 데이터로 변환하여 반환할 것이다. 풀이의 핵심이 되는 메소드는 바로 ArrayList의 indexOf() 메소드이다. 우선 크기가 10인 String 배열 arr를 선언하여 zero 부터 nine까지 채워준다. 이때 각 단어가 들어간 인덱스는 해당 영단어가 뜻하는 숫자와 일치하게 된다. indexOf()..

BOJ - [10773] 제로 🖍 숫자를 저장하고 0을 부르면 이전 숫자를 지운다. 이후에 숫자들을 합한 값을 출력하는 문제 (link) 10773 제로 [풀이 과정] 스택을 사용하는 문제다. 스택은 대표적인 후입선출(LIFO) 자료구조이므로 해당 문제를 아주 쉽게 해결할 수 있다. 0이 아닌 수를 부르면 그대로 저장하고, 0을 부르면 저장하지 않고 스택 맨 위에 있는 값을 빼는 식으로 진행한다. 그렇게 수가 걸러지면 stack에는 유효한 숫자들만 남아있게 된다. 스택 최상단 값을 반환하는 peek와 스택 최상단 값을 삭제하는 pop 메소드로 차례차례 스택에서 값을 꺼내 값을 합하면 되겠다. [Pseudocode] 1. stack 선언 2. 테스트 케이스 개수 k 선언 3. stack에 저장할 정수형 변..

BOJ - [2581] 소수 🖍 M부터 N까지의 소수를 찾고, 그 소수들의 합과 그 중 최소값인 소수를 출력하는 문제 (link) 2581 소수 [풀이 과정] 소수를 판별하는 가장 효율적인 방법을 두고 다른 방법을 써서 풀었기 때문에... 나중에 수정해서 다시 풀어야 할 것 같다. 우선 개념 설명 먼저하겠다. 소수란 1과 자기 자신만을 약수로 가지는 자연수이다. 0과 1은 소수가 아니며, 2를 제외한 짝수들은 모두 약수로 2를 가지기 때문에 소수가 아니다. 소수를 판별하는 방법은 총 세 가지이다. 1부터 N까지 수 중에서 소수를 찾고 있다고 가정하고 이야기하겠다. 소수는 1과 자기 자신만을 약수로 가진다. 따라서 N보다 작은 자연수로 모두 나누어볼 때 나누어 떨어지는 경우가 있으면 N은 소수가 아니게 된..

BOJ - [17478] 재귀함수가 뭔가요? 🖍 챗봇의 응답을 재귀적으로 출력하는 문제 (link) 17478 재귀함수가 뭔가요? [풀이 과정] 정말.. 재밌는 문제같다. 근데 확실히 재귀라는 개념을 단번에 이해할 수 있는 문제이기도하다. 일단 함수안에 문장을 그대로 적으면 복잡해보일 것 같아서 문장들을 따로 String 변수에 저장했다. 이때 주의할 점은 출력에서 재귀 단계에 따라 언더바를 4개씩 추가하여 출력해주어야 하기 때문에 언더바가 시작하는 문장마다 따로 저장해야 한다. (이를테면 "잘 들어보게." 부터 "한 선비가 찾아와서 물었어." 까지는 한 문장 같지만 엔터처리되는 부분마다 언더바가 들어가므로 세 변수에 따로 저장한다) 물론 이렇게 하지 않아도 분명 다른 방법이 있긴 할 거다. 재귀함수에서..

BOJ - [10872] 팩토리얼 🖍 주어진 정수의 팩토리얼을 구하는 문제 (link) 10872 팩토리얼 [풀이 과정] 팩토리얼이라는 개념은 배운지 엄청 오래된 것같다. 중학교인지 고등학교인지 .. 아무튼 내가 CS공부한지 얼마 안됐을 때 솔직히 뭔지 기억안나서 찾아봤다. 팩토리얼도 재귀를 통해 구할 수 있다. 물론 재귀로 구할 수 있으면 반복문으로도 구할 수 있다. 그런데도 굳이나 어려운 재귀를 사용하는 이유는 직관적이고 구현이 간단하기 때문 n! = 1 * 2 * 3 * ... * n n을 1씩 더해주면서 곱하게하면 되겠다.. 싶겠지만 재귀를 사용할 것이기 때문에 거꾸로 n에서 1씩 뺀 값을 곱해줄 것이다. 종료 조건은 n이 1이 되었을 때이다. n이 1이 되면 1을 반환한다. else문에서는 별다..

BOJ - [10829] 이진수 변환 🖍 주어진 10진수를 2진수로 변환하여 출력하는 문제 (link) 10829 이진수 변환 [풀이 과정] 테스트 케이스 N의 최대값이 10조나 되는 문제다. 때문에 int타입으로 받으면 안되고, long 타입으로 입력을 받으면 된다. --참고-- int타입의 범위 : -2,147,483,648 ~ 2,147,483,647(약 21억) long타입의 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807(약 922경) 아무튼 2진수로 변환하는 문제는 재귀로 구현가능하다. 재귀 구현에 대하여 간단하게 설명하자면, 반환 값으로 메소드 자신을 호출하여 반복하게끔 하는 것이다. 때문에 무한 반복을 막기 위한 종료 조건이 꼭 필..

BOJ - [4153] 직각삼각형 🖍 입력으로 세 변의 길이가 주어지면 해당 변으로 이루어지는 삼각형이 직각삼각형인지 판별하는 문제 (link) 4153 직각삼각형 [풀이 과정] 중학교 수준의 수학 문제. 요즘은 초등학교 고학년들이 알지도 모른다. 내가 아무리 수포자라지만 피타고라스 정리를 모를 정도는 아니다. 지금 이 글을 보고 있는 사람이라면 이정도 수학 지식을 모를리가 없기 때문에 바로 코드로 구현해보겠다. 우선 세 변의 길이를 저장하기 위해 크기 3의 배열을 선언한다. 그리고 이 문제에서는 테스트 케이스 개수가 주어지지 않았기 때문에 while문을 이용하여 0 0 0 이 주어질 때까지 반복하게끔 한다. (do while문을 써도 괜찮을까? 일단 나는 while문의 조건을 true로 설정한 뒤 wh..

BOJ - [3009] 네 번째 점 🖍 점 세개의 좌표가 입력되었을 때, 축에 평행한 직사각형을 만들기 위한 마지막 점의 좌표를 출력하게 하는 문제 (link) 3009 네 번째 점 [풀이 과정] 직사각형의 좌표 특징을 우선 살펴본다. 여러가지 풀이 방법이 있겠지만, 내가 찾은 규칙은 다음과 같다. 좌표 네 개가 주어지고, 각각 x와 y좌표를 나누어 봤을 때 같은 숫자가 두 번 씩 나오면 직사각형을 이룬다. 무슨 말인지 자세히 알아보기 위해 테스트케이스 하나를 예시로 들어보겠다. (5, 5) (5, 7) (7, 5)라는 테스트 케이스가 주어졌다고 가정한다. 4분면 위에 점을 찍어보면 나머지 점 하나의 좌표는 (7, 7)이라는 것을 금방 알 수 있다. 우선 세 좌표를 x와 y로 나누어서 써보면 x = 5,..