목록전체 글 (29)
렝무식

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,..

BOJ - [2869] 달팽이는 올라가고 싶다 🖍 A미터 올라가고, B미터 미끄러지는 달팽이가 V미터의 나무 막대를 올라가는데 며칠이 걸리는지 구하는 문제 (link) 2869 달팽이는 올라가고 싶다 [풀이 과정] 시간 제한이 0.15초인 문제이다. 한마디로 노가다로 구하는 알고리즘은 소용 없고, 공식을 구해서 풀라는 의미 처음에 반복문으로 A올리고 B내리고 해서 구했다가 시간 초과 당했다. 그리고 이 문제는 제대로된 식을 구해도 시간 초과가 뜨는데, 언어를 java 11이 아니라 java 8로 설정해야 풀린다. 아무튼 공식 먼저 이야기 하자면 (V-A)/(A-B)+1 이라고 쓸 수 있다. 우선 총 거리인 V에서 올라갈 수 있는 거리 A를 빼준다. (마지막 날에 A만큼 한 번 올라간다면 무조건 도착할 수..

BOJ - [1316] 그룹 단어 체커 🖍 각 문자가 연속해서 나타나는 단어인 '그룹 단어'의 개수를 출력하는 문제 (link) 1316 그룹 단어 체커 [풀이 과정] 그룹단어가 무엇인지는 문제에 잘 나와있으니 설명은 생략하겠다. 이 문제는 이전에 풀었던 1157번 문제인 단어 공부 문제의 풀이를 응용할 수 있다. 단어 공부 문제를 풀 때 알파벳을 아스키 코드 값으로 변환하여 배열에 넣어주는 방식을 사용했고, 여기서도 그 방식을 사용할 것이다. (여기서는 입력 형태가 소문자로 주어지기 때문에 소문자 a의 아스키 코드 값인 97의 뺄셈 연산을 이용한다) 그룹 단어가 몇 개인지 체크하기 위해 그룹 단어가 '아닌' 단어의 개수를 저장할 정수형 변수 count를 선언한다. (연산의 편의를 위하여 그룹 단어가 아..

BOJ - [2775] 부녀회장이 될테야 🖍 주어진 조건에 맞게 입력된 k층 n호에 사는 인원을 구한 뒤 출력하는 문제 (link) 2775 부녀회장이 될테야 [풀이 과정] 배열을 사용한 다이나믹 프로그래밍(DP) 문제. 다이나믹 프로그래밍이 뭔지 간단하게 설명하자면, 이전에 구해두었던 값은 다시 계산할 필요 없이 이전의 값을 활용할 수 있게끔 하는 기법이다. 일단.. 문제를 읽으니 단번에 이해가 안된다. 무슨 내용인지 먼저 설명하겠다. 0층부터 14층, 1호부터 14호까지 있는 아파트다. 0층에 사는 사람은 1호에 1명, 2호에 2명.... 14호에 14명이 산다. 1층 부터는 아래 층 호수까지의 사람들을 합산한 인원이 해당 호수에 살아야 한다. 말로 설명하면 무슨 말인지 이해가 잘 안되는데 순서대로 ..

BOJ - [1157] 단어 공부 🖍 주어진 문자열에서 가장 많이 사용된 알파벳을 대문자로 출력하는 문제 (link) 1157 단어 공부 [풀이 과정] 사용한 자료구조는 배열. 배열 인덱스로 알파벳을 구분하여 각 알파벳 값이 나온 횟수를 배열에 저장하는 방법으로 풀었다. 우선 크기가 27인 정수형 배열을 하나 선언한다. (이유는 나중에 설명함) 그리고 대소문자 구분 없이 카운트하므로 toUpperCase() 메소드를 사용하여 문자열을 출력 형태인 대문자로 맞춰줌. 이번에도 역시 문자열 charAt() 메소드로 하나씩 나누어준다. 이때 나누어진 char 데이터를 이용하여 인덱스를 결정할 것이다. 조금 더 자세히 설명하자면 char 데이터를 int 데이터와 연산하여 인덱스를 결정할건데, 이때 대문자 알파벳 ..

BOJ - [11720] 숫자의 합 🖍 숫자의 개수를 입력 받은 후 개수 만큼의 숫자를 공백없이 입력받아 모두 더한 값을 출력하는 문제 (link) 11720 숫자의 합 [풀이 과정] 숫자를 "공백 없이" 받아온다는 것이 조건. 즉, 개수 n개를 입력 받으면 그 후에 숫자를 해당 개수 만큼 입력 받는게 아니라, 한번에 n자리수 숫자 만큼 받는 것이다. 처음에 문제를 이해 못했음. 그 후에도 뭐가 문제인지 몰라서 문제를 다시 봤는데 입력 형태가 좀 이상하더라.. 입력 형태를 보면 숫자들이 붙어있다... '저러면 숫자 하나로 인식될텐데?' 라는 생각이 퍼뜩 들었다. 따라서 숫자를 따로따로 띄워놓는게 이 문제가 의도한 것임. 더 좋은 방법이 있을 것 같기도 한데, 일단 생각나는 방법은 문자열로 입력받은 후 c..