문제 - 괄호 문자열은 두 개의 괄호 기호인 '('와 ')'만으로 구성되어 있는 문자열 - 한 쌍의 괄호 기호로 된 "()" 문자열은 기본 VPS(Valid Parenthesis String, 올바른 괄호 문자열) - 만일 x가 VPS라면 "(x)"도 VPS - 두 VPS x와 y를 접합시킨 새로운 문자열 xy도 VPS - 주어진 괄호 문자열이 VPS인지 아닌지 판단해서 결과를 YES / NO로 출력 해결방법 스택에 괄호를 넣으면서 VPS를 판단할 수 있도록 하였다. 비어있는 상태에서 닫힌 괄호가 입력되면 VPS가 아니므로 NO를 출력할 수 있도록 하였고, 비어있는 상태에서 열린 괄호가 입력되면 스택에 넣어주었다. 그리고 스택에 무언가 들어있는 상태에서 열린 괄호가 입력되면 스택에 넣어주고, 닫힌 괄호가..
문제 - 사람의 덩치를 (몸무게, 키)로 표시 - A : (x, y), B : (p, q)라고 할 때, x > p 그리고 y > q이라면 A의 덩치가 B의 덩치보다 더 크다고 말함 - 하지만 몸무게는 A가 더 많이 나가지만, B가 키가 더 크다면 누구도 상대방보다 더 크다고 말할 수 없음 - N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 큰 덩치의 사람의 수로 정해짐 - 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k + 1 해결방법 각 사람과 다른 사람의 덩치를 비교해보면서 더 큰 사람의 덩치 등수를 1씩 더해준다. 각 사람의 신체 정보를 담는 배열과 덩치 등수를 담는 배열을 만들어 해당 사람들의 덩치를 비교하면서 덩치 등수를 변경해준다. 코드 import java.io.*; ..
문제 - 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단 - 문자열에 포함되는 괄호는 소괄호("()")와 대괄호("[]")로 2종류 - 문자열이 균형을 이루는 조건은 아래와 같음 1. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 함 2. 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 함 3. 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재 4. 모든 괄호들의 짝은 1:1 매칭만 가능. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않음 5. 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 함 - 입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어옴 - 문자열이 균형을 이루고 있으면 "yes" ..
문제 - 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분 해결방법 피타고라스 정리만 알면 문제를 쉽게 해결할 수 있다. 피타고라스 정리 : 직각삼각형에서, 빗변 길이의 제곱은 빗변을 제외한 두 변의 각각 제곱의 합과 같다. 코드 import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ String triangle = br.readLine(); StringTokenizer st = new StringTokeniz..
문제 - 달팽이는 높이가 V미터인 나무 막대 올라감 - 낮에 A미터 올라갈 수 있음 - 밤에 B미터 미끄러짐 - 정상에 올라가면 미끄러지지 않음 - 달팽이가 나무 막대를 모두 올라가는데 며칠 걸리는지 구하기 해결방법 이 문제는 V미터에 도달할 때까지 단순히 A를 더해주고 B를 빼주면 시간초과를 만나는 문제이다. 따로 계산할 수 있는 수식이 필요하다고 생각했었기 때문에 달팽이가 움직이는 것을 생각해보았다. 달팽이는 정상에 도달할 때 N번 올라간다면 N-1번 내려오는 과정이 필요하다. 마지막 올라갔을 때 정상에 도달하면 내려오지 않아도 되기 때문에 N-1번 내려오는 과정이 필요한 것이다. count = (V - A) / (A - B); 그래서 마지막으로 올라갈 A미터를 남겨두고 하루에 움직일 수 있는 양(A..
문제 - 상근이는 사탕가게에 설탕을 정확하게 N킬로그램 배달해야 함 - 봉지는 3킬로그램, 5킬로그램이 있음 - 최대한 적은 봉지로 배달하려 함 - 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지의 개수 구하기 - 정확하게 N킬로그램을 만들 수 없다면 -1 출력 해결방법 남은 N킬로그램을 5로 나눌 수 있다면 5로 나누어 봉지의 수를 카운팅 해주고, 만약 5로 나누어 떨어지지 않는다면 3을 빼주고 그 남은 무게를 5로 나눌 수 있는지 또 다시 검사하면서 봉지의 개수를 구할 수 있다. 코드 import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws Exception { BufferedRead..
문제 - 상근이는 절단기에 높이 H를 지정 - 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라감 - 한 줄에 연속해있는 나무를 모두 절단 - 높이가 H보다 큰 나무는 H 위의 부분이 잘림 - 상근이는 나무를 필요한 만큼만 집으로 가져감 - 나무는 M미터가 필요함 고찰 문제를 빠르게 이해하고 코드를 이분 탐색으로 짜는 데에는 시간이 얼마 안걸렸었다. 하지만, 이상한 곳에서 생각을 잘못하고 있었어서 계속해서 틀렸습니다.를 본 문제다. 테스트 케이스도 맞고 인터넷에서 찾은 다른 테케들도 다 맞는데 계속 틀렸다고 나와서 너무 화가 났었는데 정말 어이없는 곳에서 틀렸었다. 매번 자료형 때문에 틀리면 다음에는 자료형 때문에 틀리진 않을 거야!!!!! 하지만.... 이번에도 자료형에서 틀렸다. long으로 해줘야..