안녕하세요 선생님 항상 좋은 강의를 제공해 주셔서 감사합니다. 다름이 아니라 선생님이 추천해 주셨던 부트 캠프 중 하나인 데브 코스에 지원하려고 하는데 코딩 테스트 언어가 자바만 가능하다고 나와있습니다. 혹시 다른 언어로 만 응시해야하는 코테에 대해서 어떻게 준비해야 할지 팁 좀 알려 주실 수 있나요?? 현재 상황 : c++ 코테 문제풀고 큰돌 해설강의 듣기만 하고 있음 시험 과목 : 객관식 Java, 웹, HTML, CSS, DB, SQL에 관련된 기초 문제 + 코딩테스트(Java만가능)
강의에서 제공한 풀이는 O(s*t) 이구요! 강사님이 질문 답변으로 제공한 O(n) 코드 올립니다! 동일한 투 포인터 풀이로 한 번 천천히 보시면 좋을 것 같아요👍🏻 function main(s, t) { let hash = new Map(); for (let i = 0; i < t.length; i++) { hash.set(t[i], (hash.get(t[i]) || 0) + 1); } for (let i = 0; i < t.length - 1; i++) { hash.set(s[i], (hash.get(s[i]) || 0) - 1); if (hash.get(s[i]) === 0) hash.delete(s[i]); } let lt = 0; let result = 0; for (let rt = t.length - 1; rt < s.length; rt++) { hash.set(s[rt], (hash.get(s[rt]) || 0) - 1); if (hash.get(s[rt]) === 0) hash.delete(s[rt]); if (hash.size === 0) result++; hash.set(s[lt], (hash.get(s[lt]) || 0) + 1); if (hash.get(s[lt]) === 0) hash.delete(s[lt]); if (hash.size === 0) result++; lt++; } console.log(result); } main("bacaAacba", "abc");
6개월 동안 공부하며 포기하고 싶을 때도 있었지만, 그래도 포기하지 않고 꾸준하게 완강, 모든 문제 풀어보았네요 강사님 감사합니다 😁 혹시 도움이 될 수 있을까 해서 꾸준하게 저장소에 올렸는데 다른 사람 코드가 보고 싶으신 분은 클릭 하시면 되요 👍🏻 포기하지말고 힘내세요 여러분 :)
안녕하세요 선생님 수업자료 관련 질의 사항이 있어 이렇게 글을 남깁니다. 알고리즘 0주차 교안은 pdf문서로 너무 잘 정리해주셔서 마르고 닳도록 꿈에 나올 정도로 잘 학습하고 있습니다. 혹시 블로그에 게시되어 있는 1주차~8주차 개념 관련 글도 pdf 문서로 만들어 주실 수는 없으신가요?
좋은 강의 잘 들었습니다. 테트리스 게임 재밌네요 이미 좋은 강의이지만, 최소신장트리(disjoint set union find) 나 다익스트라, 트라이,세그먼트 트리도 있었으면 더 완벽한 강의였을것같습니다! 이거 말고는 코테에서 다루는 유형 대부분 다룬것같네요! 토대로 여러 문제들, 계속 유형별로 응용해서 더 익숙해질때까지 풀어봐야할것같습니다. 감사합니다!
안녕하세요 큰돌님 큰맘먹고 알고리즘 코테강의와 CS전공지식 강의 질렀습니다. 중소기업 직장인인데 더 깊이있는 공부와 기회가 되면 더 좋은환경에 일하고 싶어서 믿고 공부해보려고 합니다 강의수강이 무제한이여서 감사하네요 주말에 틈틈히 공부하겠습니다. 이직은 언제가 될지 모르겠지만 좋은 후기로 돌아오겠습니다 화이팅!
안녕하세요. 정리 강의를 들으면서 Filter를 스프링 빈으로 등록하는 방법을 따라하다 버전 차이인지, 스프링 부트의 설정 차이인지, 에러가 발생하더군요. The bean 'logFilter', defined in class path resource [hello/springcoremvc26/config/FilterConfig.class], could not be registered. A bean with that name has already been defined in file [/project/java/spring/spring-core-mvc2-6/out/production/classes/hello/springcoremvc26/web/filter/LogFilter.class] and overriding is disabled. 이유를 읽어보니, logFilter가 이미 빈으로 등록되어서 중복 등록이 안된다고 써져있었습니다. 그래서 이에 대해 찾아본 결과를 공유하고자 글을 작성합니다. 아래 글은 제 블로그 에도 정리되어 있습니다. (홍보...ㅎㅎ..) @Configuration LogFilter - 로그 필터 @Slf4j public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } } LoginCheckFilter - 로그인 필터 @Slf4j public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } } FilterConfig - Filter 등록 @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<Filter> logFilter() { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); bean.setFilter(new LogFilter()); bean.setOrder(1); bean.addUrlPatterns("/*"); return bean; } @Bean public FilterRegistrationBean<Filter> loginCheckFilter() { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); bean.setFilter(new LoginCheckFilter()); bean.setOrder(2); bean.addUrlPatterns("/*"); return bean; } } 실행 결과 [/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End 특징 강의에서 나온 방법입니다. 설정을 위한 별개의 파일( @Configuration 이 붙은 객체)이 필요합니다. setOrder() 를 통해 순서를 정할 수 있습니다. addUrlPatterns() 을 통해 베이스 URL 및 Whitelist를 설정할 수 있습니다. @Component LogFilter @Slf4j @Component @Order(1) public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } } LoginCheckFilter @Slf4j @Component @Order(2) public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } } 실행 결과 [/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End 특징 컴포넌트 스캔을 이용하기 때문에 설정을 위한 별개의 파일이 필요하지 않습니다. @Order 애노테이션을 이용해 순서를 설정할 수 있습니다. 기본 URL Pattern이 /* 이며 설정할 수 없습니다. @WebFilter + @ServletComponentScan LogFilter @Slf4j @WebFilter public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } } LoginCheckFilter @Slf4j @WebFilter public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } } MainApplication @ServletComponentScan @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(SpringCoreMvc26Application.class, args); } } 실행 결과 [/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End 특징 설정을 위한 별개의 파일이 필요하지 않습니다. 대신, 애플리케이션 실행되는 메인 객체위에 @ServletComponentScan 을 사용해야 합니다. @Order 를 이용한 순서 등록을 사용할 수 없습니다. 각 필터에 대한 순서를 보장할 수 없습니다. @WebFilter 의 value 나 urlPatterns 파라미터를 이용해 whitelist 방식으로 베이스 URL을 설정할 수 있습니다. @WebFilter("/filter/*") @WebFilter({"/login", "/items"}) @WebFilter(urlPatterns = "/filter/*") @WebFilter(urlPatterns = {"/login", "/items"}) @WebFilter + @Component LogFilter @Slf4j @WebFilter @Component @Order(1) public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } } LoginCheckFilter @Slf4j @WebFilter @Component @Order(1) public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } } 실행 결과 [/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End 특징 두 번째 방법과 세 번째 방법을 모두 사용하는 방법입니다. 설정을 위한 별개의 파일이 필요하지 않습니다. 컴포넌트 스캔 방식을 사용하기 때문에 @ServletComponentScan 도 필요없습니다. @Order 애노테이션을 이용해 순서를 설정할 수 있습니다. @WebFilter 의 value 나 urlPatterns 파라미터를 이용해 베이스 URL이나 Whitelist 방식으로 설정할 수 있습니다. @WebFilter("/filter/*") @WebFilter({"/login", "/items"}) @WebFilter(urlPatterns = "/filter/*") @WebFilter(urlPatterns = {"/login", "/items"}) 애노테이션이 기본으로 3개가 필요합니다. 정리 결론 필터를 사용하기 위한 4가지 방식을 알아보았습니다. 첫 번째 방법( @Configuration + FilterRegistrationBean )과 두 번째, 세 번째 방법을 합친 네 번째 방법( @WebFilter + @Component ) 중에서 고려하면됩니다. 저의 경우에는 @Configuration + FilterRegistrationBean 을 더 맘에 드는 데, 이유는 Filter Class 위에 애노테이션을 여러개 붙이는 것 보다, 별도의 생성 파일을 하나 만들어서 관리하는게 더 편할 것 같아서였습니다. 하지만, @WebFilter + @Component 은 스프링 빈으로 등록하는 방법 이기에, 다른 스프링 빈을 의존성 주입 받을 수 있습니다. 그런 경우에는 첫 번째 방법으론 할 수 없으니, 네 번째 방법을 사용하면 될 것 같습니다.
안녕하세요! 강의 잘 듣고 있는 학생입니다. 선생님 저 같은 경우 코딩 테스트 문제를 풀때, 컴퓨터(IDE)에 바로 작성하지 않고 노트에 solution 부분의 코드를 전부 손코딩으로 작성 해본 뒤에 컴퓨터로 작성합니다. 이런 방식이 코딩테스트 시험 볼때는 시간제한이 있으니,, 비효율적인지 궁금합니다. (현재는 코드가 짧아서 상관 없다고 생각하지만, 어려운 문제들.. 즉, 코드가 길어 지는 문제들을 풀때 문제가 되지 않을까? 생각하여 이렇게 질문을 남깁니다) 이렇게 하게 된 이유는, 펜으로 작성해보지 않고 바로 코드를 타이핑 하려니 생각이 잘 떠오르지 않아 이렇게 하게 되었습니다.
영상 퀄리티 문제 영상을 보는데, 볼때 마다 너무 불편해서 글 올려요. 너무 영상이 계속 씹히면서, 끊기고, 편집도 이상하게 해서 그런지 말하다가 갑자기 다른 말로 넘어갑니다. 영상 볼 때마다 했던 말 두번씩 들리고, 같은 장면 두번씩이나 보니, 영상 퀄리티가 떨어지네요.. 분명 인터넷은 문제가 없고 다른강의는 안 그러는데 말이죠, 비싼돈 주고 강의 구입했는데, 보는입장에서 매우 서운하네요.. 수정 좀 부탁드립니다...
안녕하세요 선생님, 강의를 듣다 보니 1-I 강의에서 풀이해주시는 1165번 문제가 '나는야 포켓몬 마스터 이다솜' 였던 것으로 보입니다! 하지만 아래와 같이 현재 백준에서는 1620번 문제로 변경 됐나봅니다! 참고하시면 좋을 듯 보여 공유 드립니다~ 참고로 현재 백준의 1165번 문제는 "단어퍼즐" 문제 입니다~ 그럼 좋은하루 되세요 :)