목록Coding-Test (16)
일단 씻고 나가자
백준 알고리즘 문제 풀 때 일일이 I/O 쓰시기 번거로우셨죠?귀찮음을 해소해드리고자 직접 만든 템플릿을 소개합니다.복사해서 메모장 같은 곳에 저장하시고 문제 풀 때마다 붙여넣고 푸시면 편리할 것 같습니다. import java.util.*;import java.io.*;public class Main { public static void main(String args[]) throws Exception { // reader.readLine() BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // writer.append("").append("\n") ..
이것도 푸는 데 진짜 한참 걸렸다.문제 자체는 쉬워서 호기롭게 도전했지만 정확성만 맞히는 데에도 한참 걸렸다.기본기가 중요하다고 느낀 문제. 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr Problem간략하게 DB를 만들고, 문제에 주어지는 쿼리를 날려보라 이거다.문제는 설명할 것이 없고, 효율성까지 따졌을 때 크게 대두되는 문제는 다음과 같다. 어떤 식으로 DB를 만들 것인가?와일드 카드 ( - ) 가 나왔을 때 어떻게 검색..
`마나커 알고리즘` 이란문자열 내의 회문을 빠른 속도로 판별해주는 알고리즘이다. 문자열의 개별 문자에서 양쪽 방향으로 전체 탐색을 하는 방법이 아닌,기존에 탐색했던 값을 저장하여 활용하는 dp 성격을 띄는 알고리즘이다. 원리먼저 알고리즘을 설명하기 앞서 회문의 성격에 대해 생각해보자. 회문의 성질은 다음과 같다.중간 문자를 기준하여, 같은 거리만큼 떨어진 문자는 같다.회문 내부에 회문이 존재할 수 있다.하나의 글자도 회문이 된다. 회문 검사를 더 빠른 방식으로 하기 위해선아무래도 2번 조건인 회문 내부의 회문을 검사하여 응용하는 방식이 유용해 보인다. 이때 주의해야 할 것이,보통 회문 내부의 회문이라면, 아래 예시처럼 특정 포인트를 기점으로 두 개의 같은 회문이 반복되는 케이스만을 생각하게 된다..
`누적합/구간합 알고리즘` 이란 배열에서 특정 구간의 합을 한 번의 계산으로 처리할 수 있는 기법이다. 배열이 주어지고, n만큼 연속된 구간의 합을 m번 질문한다면,일반적으론 for(0 ~ n) * m 의 방식을 활용하여 n * m 의 속도가 나오지만,누적합을 활용하면 매 질문당 한 번의 연산으로 m의 속도만이 필요하다. 일반적인 일차원 배열에서의 활용법,이차원 배열에까지 확장한 활용법과,누적합 활용을 위한 배열 세팅 방법까지 알아보자. 원리 다음 도형에서 색칠된 칸의 개수는 몇 개인가? V V V V 손으로 세어서 4칸이다. 그런데 만약 이런 푯말이 있다고 가정하자. 처음부터여기까지4칸 처음부터여기까지8칸 V V V V 이 상황에서도 손으로..
새로운 마나커 알고리즘(Manacher Algorithm)에 대해 학습할 수 있었다.직관적인 이해가 어려웠던 알고리즘. 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12904 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr Problem문제는 간단하다. 주어진 문자열 내에서 가장 긴 회문의 길이를 도출하는 문제.회문(palindrome)은 중간 글자를 기점으로 양쪽이 똑같은 문자열을 말한다.즉, 문자열이 "banana"로 주어진다면 b [ a n a n a ] = 5 를 도출하면 되..
진짜 별 난리를 치고 허우적거리다 겨우 푼 문제. 안 풀려서 미루고 미루다가 거진 6개월만에 풀었지 싶다.. 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Problem 간단하게 과제 더미가 있고, 완벽주의자 J의 성향을 가진 '루' 라는 친구가 수많은 과제를 어떤 순서로 마치는지 맞혀보라고 골치를 썩이는 문제이다. 각 과제는 문자열 배열에 ["과제 이름", "과제 시작 시간", "과제가 걸리는 시간"] 으로 정보가 담기며, ..
수학적인 직관만 있다면 쉽게 아이디어를 얻고 풀이할 수 있는 문제. 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12938 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Problem 정수 n, s 가 주어지며, 's 가 베이스가 되는 특정 조건'에 해당하는 n 개의 0이 아닌 자연수를 찾으면 되는 문제이다. 이때 n 개의 문자는 배열로 return 해야 하며, 오름차순으로 정렬 후 제출해야 한다. '특정 조건' 이란 n 개의 숫자 합이 s 가 되면서, 각 숫자들의 곱이 최댓값이 되..
시간이 좀 많이 걸렸는데 괜찮나..? 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/1835 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Problem 8명이 사진을 찍는데, 모든 경우의 수 중에서 data 에 주어진 조건이 모두 성립하는 경우의 수는 총 몇 가지가 있느냐 물어보는 문제이다. 주요 포인트는 다음과 같다. 8명이 전부 사진에 담겨야 한다. (7명, 6명.. 의 경우의 수는 존재할 수 없고, 중복되는 사람이 있을 수 없다) 조건식 (data) 은 항상 5글자로, 다음과 ..
문제만 잘 이해했다면 쉬웠던 문제. 다만 생각의 전환만으로도 시간은 2배 가량를, 메모리는 약 5~10배를 대폭 줄일 수 있어, 다짜고짜 풀이가 아닌 수학적인 생각이 얼마나 중요한지 한 번 더 깨닫게 해주는 문제였다. 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Problem 문제는 설명만 이해한다면 간단하다. 최종적으로 works 배열의 각 숫자 원소들을 제곱하여 더할 건데, 그 값을 최소화 해보라는 문제이며, 최소화 과정은..
워~ 쉽다 이거이 다 쉽워~ 문자열의 수정이나 삭제는 문법적인 주의도 요해야 함과 동시에 논리적인 흐름도 신경 써야 해서 어지러운 것 같다. 따라서 문자열의 수정 관련 클래스와 규칙성만 발견한다면 잘 해낼 수 있었던 문제. 물론 코딩 끈이 짧지만, 개인적인 철학으로는 '내가 이 문제를 푸는 방법을 그대로 코딩에 적용하자'라는 마인드가 있다. 다만 사람이 푸는 건 시각적으로 슥 보는 순간 뇌에서 여러 논리적인 흐름을 거쳐 답을 도출하므로, 내가 어떤 논리적은 흐름을 거쳐서 답을 도출해낼 수 있었는지에 대한 성찰과 설명이 필요하다. 다만 순간적인 판단으로 답을 내리는 건 적용해서도 안 되고 적용할 수도 없다. 예제 3번의 경우는 문자열의 크기가 워낙 작기 때문에 보기만 해도 직관적으로 답을 낼 수 있지만, ..