teching의 등록된 링크

 teching로 등록된 티스토리 포스트 수는 167건입니다.

[Querydsl] querydsl 간단하게 알아보기 [내부링크]

업무에서 Querydsl을 사용하게 될것같아서 간단하게 알아보는 시간을 가져 보았다. Querydsl를 짧게 표현하자면 SQL, JPQL등 쿼리를 코드로 작성하게 해주는 빌더 오픈소스 프레임워크이다. 소개 배경 Querydsl을 사용하기 이전에는 query를 문자열로 작성해야 했다. JPQL을 생각해보면 아래와 같이 작성하고 있었다. @query("select a from Test a") Optional findAll(); 이와 같이 작성하면 쿼리를 문자열로 작성하다보니 실수할 수 있고 또 문제가 컴파일때 발생하지 않고 실행시에만 문제를 찾을 수 있다는 단점이 있었다. 이를 해결하고자 Querydsl은 자바코드로 쿼리를 작성할 수 있게 해주어 개발자의 실수를 줄일고 컴파일 타임에 오류를 찾을 수 있도록 ..

AOP에 대해 알아보자 [내부링크]

스프링의 중요 개념 중 하나인 AOP (Aspect-Oriented Programming)에 대해서 알아보는 시간을 가져보려고 한다. AOP란? AOP란 개발을 하면서 중복코드를 제거하고 모듈성을 향상하기 위해서 사용되는 프로그래밍 패러다임이다. spirng은 이러한 AOP를 지원하고 있다. AOP의 핵심은 “횡단 관심사”를 분리하는 것이다. 즉, 애플리케이션의 주요 로직과는 별도로 존재하는 공통된 기능들을 한 곳에 모아서 관리하는 것 이러한 공통 기능을 “Aspect”라고 하며, 이를 원하는 부분에 주입하여 적용한다! AOP 장점 모듈성 향상 : 핵심 비즈니스 로직과 공통 기능들을 분리하여 코드의 가독성과 유지보수성을 개선한다. 중복 코드 제거 : 공통 기능이 여러곳에서 필요한 경우, AOP를 사용하여..

Java 로깅 알아보기 2 - logback [내부링크]

2023.08.04 - [자바(Java)] - Java 로깅 알아보기 1 - Logging이란 기본적인 내용은 이전 글을 통해 확인하는 것을 추천! Log4j 구조 Logger : 로그의 주체, 로그의 메시지 전달, 특정 패키지 안의 특정 레벨 이상만 출력 Appender: 어디에 출력할지에 대해 기술 Encoder: 어떻게 출력할지에 대해 기술 Logback 환경 설정 (logback.xml) resources 하단에 logback.xml 파일 생성 %d{yyyy-MM-dd HH:mm:ss} %highlight([%-5p]) --- [%F]%M\\(%L\\) : %m%n 속성 설정 appender 부분은 출력위치를 결정해 주고 (STDOUT), Appender로 사용할 클래스를 설정해 주는 부분이다. ..

Java 로깅 알아보기 1 - Logging이란 [내부링크]

로깅 (Logging) 시스템의 작동 정보인 로그(Log)를 기록하는 것 시스템이 작동할 때 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동 중 각종 정보를 기록하는 것 일반적인 출력인 System.out.println()은 동기이기 때문에 로그를 출력하는 동안 다음 동작을 할 수 없기 때문에 성능저하가 발생한다. Slf4j (Simple Java Facade For Java) 로깅 프레임워크가 아님. 다양한 로깅 프레임워크가 접근할 수 있도록 하는 추상화 계층(인터페이스) 단독적으로 사용할 수 없다. 브리지를 통해 자바의 다양한 로깅 프레임워크를 간편하게 사용할 수 있다. 로그 종류 Fatal : 아주 심각한 에러 Error : 요청을 처리하던 중 문제가 발생..

[JSP] jsp 태그 알아보기 [내부링크]

JSP 세팅 spring 3.0부터는 의존성 변경해야함 implementation 'jakarta.servlet:jakarta.servlet-api' implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' JSP 태그 문법 (xml 문법) 주석 () 선언 ( ... ) 지시 () () (xmlns:prefix="tag library URL") 표현 ( ... ) 스크립트 ( ... )

코드리뷰 약어 살펴보기 [내부링크]

사이드 프로젝트를 진행하고 있는 팀원들과 코드리뷰 아닌 코드리뷰를 진행하고 있는데 그동안은 정해진 규칙 없이 아무렇게나 작성하곤 했다. 그러다 보니 중요한 코멘트와 중요하지 않고 단순 의견임을 나태내기 어렵다는 생각이 들기 시작했다. 때로는 잘 작성한 것 같아 그냥 “수고하셨습니다.”만 날리곤 했다. 따라서 코드리뷰에서 주로 사용한느 약어들을 정리하여 실제로 사용보면 어떨까 하여 알아보았다. CL (ChangeList) 코드 변경 단위, 변경된 코드 리스트 NIT (NITpicking) 중요하지는 않지만 더 나은 방법이 있다는 의견 (TMI와 비슷한 느낌이다.) LGTM (Look Good To Me) 내가 보기엔 좋아보여라는 뜻으로 문제가 없어 보일 때 사용한다 비슷한 말로 (SGTM (Sounds G..

2022년 11월 부터 2023년 7월까지의 일일커밋 회고 [내부링크]

먼저 일일커밋에 대해서 알게 된 경로는 백엔드 교육을 받으면서 우연히 강사님께서 소개해주신 이동욱 님의 블로그(https://jojoldu.tistory.com/ )를 소개시켜 주셨고 블로그를 보던 중 일일 커밋에 대한 글을 보고 알게 되었다. 일일커밋을 보고 마치 게임을 하듯이 경험치를 쌓는 느낌으로 할 수 있다는 느낌은 게임을 좋아했던 나를 일일커밋에 뛰어들게 만들었다. 처음에는 익숙하지 않았지만 매일매일 쌓여가는 잔디를 보며 내가 성장하고 있다는 느낌에 뿌듯함을 느꼈다. 점점 일일커밋이 습관이 되고 어느 순간부터는 하루라도 빼먹으면 불안감에 휩싸이는 집착이 되었다... 어떠한 커밋을 했는가인 내용은 둘째가 되었고 커밋을 한다는 그 행위에 집착하게 된것 같다. 즉, '깊이'를 늘릴생각을 하지 않게 된..

Bean, VO, DTO, Entity 구분하기 [내부링크]

개발을 하면서 데이터를 다루기 위해서 여러 종류의 클래스들을 사용하게 되는데 대표적으로 Bean, VO, DTO, Entity 등이 있다. 이것들을 구분하여 언제 사용해야 하는지 알아보는 시간을 가져보았다. Bean Bean은 Java Bean과 Spring Bean으로 나눠지는데 조금 다른 의미가 있어 구분할 필요가 있다고 생각한다. Java Bean 자바로 작성된 소프트웨어 컴포넌트 클래스로 동작하기 위해 따라야할 몇 가지 관례가 있다 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원시키기 위해) 클래스는 기본 생성자를 가지고 있어야 한다. 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다. 클래스는 필요한 이벤트 처리 메서드들..

필터(filter), 인터셉터(interceptor), AOP(Aspect-Oriented Programming) 살펴보기 [내부링크]

Spring에서 필터와 인터셉터 그리고 AOP는 전부 공통 로직을 분리하여 처리하기 위해서 사용하기 위해서 사용되는 기능이다. 하지만 사용방법과 적용되는 위치의 차이가 있기 때문에 알맞게 사용해야 한다. 큰 구조는 Spring mvc Request 라이프 사이클을 통해 확인할 수 있다. ( AOP는 표시되어 있지 않지만...) 필터(Filter): 필터는 서블릿 컨테이너(예: Tomcat, Jetty)에서 요청과 응답을 가로채는 기능이다. 주로 요청과 응답의 헤더를 수정하거나 인코딩을 처리하는 등의 작업에 사용된다. Spring의 javax.servlet.Filter 인터페이스를 구현하여 사용한다. 필터는 web.xml에 등록하여 적용되고, Spring Boot에서는 FilterRegistrationBe..

[Spring boot] war로 배포하기, SpringBootServletInitalizer [내부링크]

현재는 spring boot에 Tomcat이 내장되어있는 Embedded Tomcat형태의 jar파일로 빌드되어 단순히 실행하면 되지만 jsp를 사용하는 웹어플리케이션같은 경우에는 war로 빌드하여 Tomcat이나 Jetty와 같은 외부 서블릿 컨테이너를 통해서 배포를 해야 했는데 이경우에 SpringBootServletInitalizer를 상속받아서 실행되도록 하여야 한다. 즉, SpringBootServletInitalizer를 상속받는 이유는 웹 어플리케이션 서버를 war형태로 배포하기 위해서 사용한다. jar vs war 그렇다면 war와 jar는 어떤 차이가 있는건지도 알아보았다. 먼저 두파일 전부 어플리케이션을 간단하게 배포하고 실행시킬 수 있도록 관련파일들을 패키징해주는 것이 목적이다. ja..

[JPA] 생성일, 수정일 자동 기입 기능 추가하기 (AuditingEntityListener) [내부링크]

게시글과 같은 기능을 구현하다보면 생성일, 수정일을 관리해야하는 경우가 흔하게 발생한다. 이럴때 서비스로직에 직접 생성, 수정시에 해당 날짜를 생성일, 수정일 컬럼에 직접 update하는 방식으로 구현할 수 있다. 하지만 이렇게 되면 사람이 코드를 작성하다보니 까먹고 추가를 안하는 경우가 생겨 정상적으로 동작하지 않는 컬럼이 될수 있다. 이러한 부분을 해결하기 위해서 엔티티에 리스너를 추가하여 엔티티를 조작할때 추가적인 로직을 설정할 수 있다. 바로 AuditingEntityListener를 이용하는 것이다. EntityListener EntityListener는 엔티티에 이벤트가 발생하는 것을 감지하여 동작하는 로직을 구현할 수 있도록 해준다. JPA는 7가지의 이벤트를 감지할 수 있다. 사용 방법은 ..

7월 4일(화) 클릭앤터치 면접 후기 [내부링크]

클릭앤터치 기업의 면접에 다녀왔다. 역삼에서 내려서 회사까지 걸어서 15분 정도 걸어가야 해서 도착하니 운동할 때보다 땀이 더 많이 났다 여자저차 도착해서 면접 시작했다. 면접은 면접관 2분 나 혼자 해서 2:1 면접으로 진행됐다. 처음은 자기소개로 시작했다. 여기서 기업이름을 잘못 말해서 시작부터 꼬였다. 이후로 순서는 모르겠고 대략 생각나는 질문만 기억해 보면 진행했던 프로젝트 소개 가족관계 (이건 왜 물어봤을까...) 오는 데 걸린 시간 인터프리터 vs 컴파일 사용해 본 언어를 인터프리터와 컴파일로 분류해 본다면? 자바 특징 다형성 설명 개발을 하면서 막히는 부분이 생기면 대처방법 사회생활을 하면서 중요하게 생각하는 3가지 연계질문 2~3개 더 던저주셨다. 공백기 질문 과에서는 어떠한 것을..

[Docker] Dockerfile 작성하는 방법 [내부링크]

도커파일 작성 방법에 대해 학습하기 위해서 공식문서를 참고하여 학습하는 시간을 가져보았다. https://docs.docker.com/engine/reference/builder/ Dockerfile reference docs.docker.com 도커파일(DockerFile)이란? 도커의 이미지를 생성할 때 수행할 코드들을 작성해 두는 텍스트 파일이다. 즉, 템플릿 같은 역할을 하게 된다. 예로 java 17 버전을 이용한 spring boot jar 파일을 실행시킬 이미지를 만드는 dockerfile이다. FROM openjdk:17 ARG JAR_FILE=./build/libs/*.jar COPY ${JAR_FILE} /app.jar ENTRYPOINT ["java","-jar","/app.jar"]..

6월 23일(금) 이노팩토리 면접 후기 [내부링크]

여기저기 많은 기업에 서류를 넣고 탈락을 반복하던 와중 이노 팩토리라는 기업에서 면접 제안을 받게 되었다. 지금 시기에 흔치 않은 기회라 거절 않고 바로 수락하여 면접을 보게 되었다. 면접은 1:1로 진행되었고 집에서부터 걸린 시간, 공백기에 대한 질문, 기업에 대해 아는지와 같은 기본적인 질문들로 시작하셨다. 또한 자바에 관련된 질문을 해주셨는데 1. List vs Set vs Map 2. List vs ArrayList 3. 데이터베이스 Join 4. Inner Join vs Outter Join 이렇게 질문을 주셨고 아는 한도내에서 최대한 답변을 드렸다. 또한 원하는 연봉을 물어보시길래 내부 규정에 따르겠다고 말했으나 한 번 더 여쭤보셔서 3500을 불렀다. 이유도 여쭤보시길래 비슷한 조건의 많은 ..

[JPA] 페이징 처리, Paging (Pagination, Infinite Scroll) [내부링크]

페이징 처리 페이지네이션? 무한 스크롤? 페이징 처리는 한 번에 모든 데이터를 가져오면 많은 시간이 걸리기 때문에 단위를 나눠서 데이터를 가져올 수 있도록 단편화시키는 것을 의미한다. 구글만 보더라도 아래와 같이 페이지네이션을 처리해 두었다. 위와 같이 페이지를 나누어 사용자가 골라 접근할 수 있도록 만든 것을 페이지네이션이라고 부른다. 웹페이지를 이용할 때 흔하게 볼 수 있는 모습이다. 반면 요즘에는 SNS 같은 곳을 보면 이러한 숫자방식의 페이지네이션이 아닌 스크롤을 모두 내리면 추가적인 콘텐츠를 불러오는 방식의 무한 스크롤(infinite scroll) 방식도 많이 사용한다. 하지만 이러한 방식의 차이는 어떻게 보여주냐의 차이일 뿐 내부적인 로직은 거의 흡사하다. 기본적인 동작 원리는 조회할 때 얼..

Builder Pattern, 빌더 패턴 [내부링크]

빌더 패턴 (Builder Pattern) 빌더 패턴이란? 객체를 단계별로 생성할 수 있게 만들어주는 패턴이다. 왜 사용하나요? 생성자의 의미가 좀 더 명확해진다. 재사용을 높인다. 단일 책임의 원칙 (생성만을 담당하는 빌더가 생김) 클래스에 여러 필드들이 있고 생성자에 너무 많은 파라미터를 두게 되면 호출 시에 매우 지저분한 코드가 될 것이다. 또한 파라미터를 부분적으로 사용하지 않는 경우 오버로딩을 통해서 해결할 수 있지만 생성자의 수가 기하급수적으로 늘어나게 될것이다. 빌더 패턴은 이러한 경우에 사용하면 좋은 효과를 볼 수 있다. 예를 들어 집을 만든다고 했을 때 창문의 형태, 수영장 여부, 크기, 주변 나무 개수, 지붕의 형태, 집의 형태 등등 다양한 조건이 올 수 있다. 이 것을 한 번에 만든다..

Gradle을 이용한 순수 자바 Jar 만들기 [내부링크]

스프링 부트에서는 간단하게 bootJar 커맨드를 이용해서 Jar파일로 만드는 것이 간편했지만 자바만 사용했을 때에는 몇 가지 작업을 해주어야 한다. 1. Gradle plugin 설정 그래들에는 Java에 관련된 Task들을 작업해 둔 기본 plugin이 존재한다. 이를 이용하면 빌드와 같은 작업들을 간단하게 할 수 있다. build.gradle에 다음 구문을 추가해주면 된다. plugins { id 'java' } 이와 같이 추가해주고 gradle build gradle jar 명령어를 실행해 주거나 인텔리제이에서 가장 우측에 보면 Gradle 탭이 있는데 거기에서 Tasks - build에 들어가서 build와 jar를 순서대로 작동시켜 주면 된다. 이렇게 하면 프로젝트 최상위 디렉터리에 build..

성격 검사 페이지 구현 회고 2 - 리액트에서 동적 비디오 로딩화면 구현하기 (복병 IOS혼내주기) [내부링크]

로딩화면? 성격 검사에 모두 응답을 하고 결과를 계산하기 위해 서버와 통신하는 사이 귀여운 캐릭터가 빙글빙글 도는 영상을 제공하려고 하였다. 기존에는 컴포넌트를 한 개씩 순서대로 보여주며 결과를 서버로부터 내려받을 때까지 로딩 애니메이션을 보여주다가 서버와 통신을 마치면 결과에 해당하는 캐릭터로 변신하는 애니메이션을 보여주고 끝나면 폭죽을 터트리며 결과화면으로 이어지는 하나의 애니메이션처럼 보이도록 단순하게 만들었다. 근데 단순히 컴포넌트를 변경하는 방법으로 구현했을 경우 네트워크 속도에 따라서 아직 영상 메타데이터들 조차 다운로드 되지 않아 빈화면으로 바뀌었다가 다시 변신 영상이 로드되는 모습이 보이게 되어 매끄럽지 않고 중간에 한번 끊기는 모습을 보여주었다. 또한 로딩 애니메이션이 끝난 뒤에 변신 애..

성격 검사 페이지 구현 회고 1 - github pages에서 react 배포하기 [내부링크]

https://16ssss.github.io/ Sixteens. site 16ssss.github.io 해당 페이지를 만들고 배포하면서 겪었던 문제들을 회고하기 위해서 이 글을 작성하게 되었다. 구현하게 된 계기 현재 진행하고 있는 프로젝트에서 웹을 다룰 줄 아는 팀원이 없었다... 그나마 내가 리액트를 접해본 적이 있었기에 내가 담당하게 되었다. (백엔드에서 어느 정도 성장을 이루면 프런트엔드도 맛보리라 생각했기에 이 기회에 맛을 봐보자라고 생각했었음) 그렇게 나만 믿으라며 의기양양하게 시작하게 된 리액트... 하지만 시작부터 순조롭지 않았다. gh-pages 리액트를 깃허브 페이지에 배포하기 위해서는 빌드한 파일을 레파지토리에 올리고 github pages 설정을 해주어야 한다. 이걸 직접 했었는데 ..

MacOS에서 JDK (Java Developer Kit) 설치하기 [내부링크]

맥북을 사용 중에 Java의 버전을 관리하고 싶어 설치방법을 알아보던 중 기록해두어야 할 것 같아서 글을 작성하게 되었다 맥북을 사용하는 사람이라면 대부분 설치되어있는 homebrew를 사용하여 설치하려고 한다. (그게 아니라면 직접 openjdk의 레파지토리에 들어가서 다운로드해주면 된다.) 주소 : https://jdk.java.net/java-se-ri/17 Java Platform, Standard Edition 17 Reference Implementations Java Platform, Standard Edition 17 Reference Implementations The official Reference Implementation for Java SE 17 (JSR 392) is based..

Spring boot의 설정 정보(application.yml / properties) 분리시키기 - spring profiles [내부링크]

사용 이유 현재 진행 중인 프로젝트에서 오라클 클라우드 프리티어를 이용해서 배포 테스트를 진행하게 되었다 현재 application.yml을 서브 모듈 ( https://teching.tistory.com/144 )을 사용해서 관리하고 있는 상황이었다. spring boot 설정 정보 외부에서 관리하기 2 - submodule https://teching.tistory.com/143 [spring boot 설정 정보 외부에서 관리하기 Spring boot 설정 정보 관리하기 서버를 github를 사용해서 형상관리를 할 생각인데 레파지토리를 public으로 열어두려고 한다... 공개 teching.tistory.com 오라클 클라우드의 DB는 특이하게 지갑을 이용해서 접속해야 하는데 그 경로를 지정 해주어..

JVM (Java Virtual Machine), 자바 가상 머신 [내부링크]

JVM JVM이란? Java Virtual Machine의 줄임말로 자바를 실행하기 위한 가상 머신을 의미한다. Java는 OS에 종속적이지 않다는 특징이 있는데 이를 위해서 OS와 독립적으로 JAVA를 실행시켜 주는 역할을 하게 된다. 자바의 컴파일 과정 일종의 가상 머신이다. 우리가 작성한 java 코드 (원시 코드)는 CPU가 인식하지 못하기 때문에 기계어로 번역을 해주어야 한다. JVM이 기계어로 번역해주기 때문에 JVM이 읽을 수 있는 코드인 Java Bytecode (. class) 파일로 번역을 해서 JVM에 전달해 주게 된다. 우리는 java코드만 작성하여 class 파일만 생성하면 JVM을 통해 OS에 무관하게 실행시킬 수 있는 것이다. 자바 컴파일러 JDK 설치하면 bin에 존재하는 j..

트랜잭션 (tansaction) [내부링크]

트랜잭션 (tansaction) 트랜잭션이란? 트랜잭션이란 서비스에서 쪼갤수 없는 쪼갤수없는 로직의 단위이다. 예로 은행업무에서 이체를 할때 두가지 로직을 수행하게 된다. A의 통장에 X만큼의 금액을 감소시킨다. B의 통장에 X만큼의 금액을 증가시킨다. 이 두개의 로직중 한개만 동작해서는 안되고 항상 두개가 동작하거나 두개다 동작하지 않아야 한다. 따라서 이 두개의 로직은 하나의 트랜잭션으로 묶여야 한다. 트랜잭션의 속성 ACID 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)이 존재한다. 이 4가지 속성의 앞글자를 따서 ACID라고 부른다. 원자성(Atomicity) 트랜잭션에 속한 각각의 문(데이터를 읽기, 쓰기, 업데이트 또는 삭..

AWS 알아보기 6 - DynamoDB & Elasticache [내부링크]

DynamoDB & Elasticache AWS DynamoDB 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공 서버리스이므로, 따로 유지비용 없이 사용한 만큼한 지불 보조 인덱스를 통한 빠른 조회를 지원 NoSQL 특성상 관계가 없기 때문에 일반적으로 데이터를 찾기에는 인덱싱이 없으면 속도가 느려지지만 그 부분을 해결해 줍니다. 서버리스(람다) 서버와의 궁합이 매우 잘 맞는다. 람다에는 RDS를 사용하는 것은 기피해야 하고 다이나모 DB를 만들어야 한다. 람다는 서버리스이기 때문에 오토스케일링이 자유롭다. 따라서 DBMS의 connection pool을 넘어갈 수 있기 때문에 위험하다. 혹은 planetscale라는 서버리스 서비스를 사용한다. 파티션키..

AWS 알아보기 5 - AWS RDS & Aurora [내부링크]

AWS RDS & Aurora AWS RDS란? 클라우드 관계형 데이터베이스를 간편하게 설정, 운영 및 확장할 수 있는 관리형 서비스 모음 RDS는 EC2위에서 동작하는 서비스 ( DB를 사용하기 위해서는 인스턴스가 필요하기 때문) 굳이 그렇게 하지 않는 이유는 DB를 좀 더 손쉽게 관리, 모니터링하기 위해서 RDS를 사용 RDS를 왜 사용? → 주요 기능들 때문 RDS 백업: 자동 백업, DB 스냅샷 멀티 AZ: 두 개 이상의 AZ에 걸쳐 DB를 구축하고 원본과 다른 DB(standby)를 자동으로 동기화(Snyc), 읽기 전용 복제본 CloudWatch 연동: DB인스턴스의 모니터링 (디테일 모니터링, CPU, Storage 사용량, 그 이외의 Error Log 등) → 클라우드 워치에 익숙해져야 한..

AWS 알아보기 4 - 메시지 큐 (Message Queue) [내부링크]

Message Queue AWS SQS, AWS Kinesis Queue? https://www.codenary.co.kr/architecture/list?category=실시간 스트리밍 https://www.codenary.co.kr/architecture/list?category=Event Driven https://www.codenary.co.kr/architecture/list?category=대용량 처리 비동기로 이벤트를 처리하기 위해 사용 AWS SQS Amazon Simple Queue Service 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 완전관리형 메시지 대 기열 표준 대기열 무제한 처리량 / 최소한 한 번 전달 (여러번 전달 될 수도 있음) / 최선 노력 순서 보통 ..

AWS 알아보기 3 - 컴퓨팅 파워 (Computing Power) [내부링크]

Computing Power (서버) AWS EC2, AWS Elastic Beanstalk, AWS ECS, AWS Fargate, AWS Lambda (Serverless) AWS EC2 (Amazon Elastic Cloud Compute) 가장 기본적인 형태의 클라우드 컴퓨팅 (= 클라우드 컴퓨터 한 대) 온디맨드 선결제 금액이나 장기 약정 없이 저렴하고 유연하게 Amazon EC2를 사용하기 원하는 사용자 스팟 인스턴스 시작 및 종료 시간이 자유로운 애플리케이션 (노는 자원 활용하기) 안정성이 보장되는 서버에는 사용하면 안된다 보통 배치에 사용, 머신러닝에 사용 Saving Plans 1년 또는 3년 기간의 일정 사용량 약정을 조건으로 EC2 및 Fargate 사용량에 대해 저렴한 요금을 제공하..

AWS 알아보기 2 - AWS 인프라 [내부링크]

AWS 인프라 AWS VPC Virtual Private Cloud 최초에 구축하는 사람이 아니라면 거의 만질일이 없다. (devops 전담팀이 따로 있을 정도) 가상 네트워크 서비스로 퍼블릭 네트워크와 프라이빗 네트워크를 분리하고 모니터링할 수 있도록 해주는 서비스 네트워크 구성과 관련된 사실상 모든 기능을 담당하며, 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사한 형태 private 서브넷은 외부와의 인터넷은 연결이 안되는데 Nat게이트웨이를 사용하면 연결 가능 AWS API Gateway 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스 서버의 “대문”과 같은 역할 API Gateway가 할 수 있는 것들: 트래..

AWS 알아보기 1 - AWS란? [내부링크]

AWS란? On-premise vs Cloud Computing On-premise 온프레미스란기업의 서버를 클라우드 같은 원격 환경에서 운영하는 방식이 아닌, 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식 Cloud Computing 클라우드 컴퓨팅은 인터넷을 통하여 데이터를 저장하거나 데이터베이스, 서버, 네트워킹, 소프트웨어와 같은 도구, 애플리케이션등 다양한 서비스를 제공하는 방식 Cloud Computing을 쓰는 이점 점점 증가하는 서버 인스턴스의 수를 온프레미스로 감당하기엔 점점 벅참 (공간적, 비용적 문제) 이를 클라우드 컴퓨팅을 통해 해결 글로벌 서비스를 제공하려면 각 국가에 데이터 센터를 직접 구축해야하는 것을 대신 AWS를 통해 해결 예로 카프카의 클러스터 규모를 살펴보면..

컨테이너, Container [내부링크]

Container Container란? 가상화 기술중 하나 호스트 운영체제 위에 여러 개의 격리된 환경을 생성하는 것 각각의 컨테이너 안에서 애플리케이션을 실행하게 된다. (실행환경을 애플리케이션 마다 관리할 수 있게 된다.) 리눅스의 커널 기능을 사용하여 만들어 졌다. chroot(파일 시스템 격리), namespace(프로세스 격리), cgroup(하드웨어 격리) 조합으로 격리 프로세스 단위 격리 대표적인 예로 도커가 있다. VM vs Container 컨테이너 기술은 각 애플리케이션 또는 서비스에 대해 별도의 OS 인스턴스 오버헤드가 필요하지 않기 때문에 더 가볍고 효율적입니다. VM < - > Container 출처: https://www.itworld.co.kr/news/103469 하이퍼 바이..

Abstract Factory Pattern, 추상 팩토리 패턴 [내부링크]

추상 팩토리 패턴(abstract factory pattern) 추상 팩토리 패턴이란? 추상 팩토리 패턴은 관련된 여러 객체를 일관된 방식으로 생성하는 인터페이스를 제공하는 패턴이다. 즉, 관련성 있는 여러 종류의 객체를 생성하는 경우 사용된다.. 추상 팩토리 패턴을 사용하면 구체적으로 어떤 클래스의 인스턴스를 사용하는지 클라이언트에게 감출 수 있다. 이 추상 팩토리 패턴을 이해하기 위해서는 팩토리 메서드 패턴을 이해해야 한다. 왜냐면 팩토리 메서드 패턴에서 발전한 것이 추상 팩토리 패턴이기 때문이다. --> 팩토리 메서드 패턴 학습하러 가기 팩토리 메서드 VS 추상 팩토리 팩토리 메서드 추상 팩토리 의도 단일 유형 객체 생성 관련 유형 그룹으로 관리 구현 방법 추상 클래스 인터페이스 다만, 구현방법은 ..

Factory Method Pattern, 팩토리 메서드 패턴 [내부링크]

팩토리 메서드 패턴이란? 팩토리 메서드 패턴은 부모(상위)클래스에 알려지지 않은 추상 클래스를 생성하는 패턴으로 자식(하위)클래스가 직접 어떤 객체를 생성할지 결정하도록 하는 패턴! 즉, 객체 생성을 위한 패턴으로 생성과 사용의 분리를 통해서 유연하게 객체를 생성할 수 있게 된다. 또한 객체 생성에 필요한 과정들을 템플릿처럼 정해놓고 각 과정을 구현할 수 있다. 왜 사용하나요? 생성자 (Creator)와 구현 객체(concrete product)의 강한 결합을 피함 객체가 생성될때 반복적으로 할 일을 수행시킬 수 있음 캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입 은닉 단일 책임 원칙 (SRP) 준수 객체 생성 코드를 한 곳 (패키지, 클래스 등)으로 이동시켜 코드를 유지보수하기 쉽게할 수 있으므..

SingleTon Pattern , 싱글톤 패턴 [내부링크]

싱글톤 패턴 (Single Ton) 싱글톤 패턴이란? 싱글톤은 클래스를 구현할때 메모리상에 하나의 인스턴스만 존재하게 하여 사용하는 패턴 왜 사용 하나요? 객체를 구현할때 메모리 리소스가 사용된다. 한개의 전역 객체로 만들어 둔다면 이러한 리소스낭비를 줄일 수 있기 때문입니다! 어디에서나 접근 가능하도록 만들기 위함입니다. 언제 사용하나요? 데이터베이스 커넥트 풀과 같이 같은 객체를 자주 사용하는 경우에 사용하면 좋아요! 문제점 싱글톤에 많은 역할들이 담기게 되면 객체지향원칙에 어긋나게 된다. => 유지보수가 힘들어 진다. 만약 멀티 스레드 환경에서 동기화 문제를 처리하지 않는다면 2개가 생기는 문제가 발생할 수 있습니다. 구현 방법 (자바) 다른 객체들이 싱글턴 클래스와 함께 new 연산자를 사용하지 ..

REST란 [내부링크]

REST 개념 REpresentational State Transfer의 약자 월드 와이드 웹(www)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식 REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일 REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나 한마디로 웹의 장점을 살려 활용하기 위한 하나의 네트워크 기반 어플리케이션 아키텍처 스타일 아키텍처 스타일? 스타일을 따르는 아키텍처가 지켜야하는 제약조건들의 집합 REST 구성 자원 (Resource) : URI 모든 자원에 고유한 ID 존재, 자원은 Server에서 관리 자원을 구별하는 ID는 HTTP URI다..

Spring boot 설정 정보 외부에서 관리하기 2 - submodule [내부링크]

https://teching.tistory.com/143 Spring boot 설정 정보 외부에서 관리하기 1 - 개요 Spring boot 설정 정보 관리하기 서버를 github를 사용해서 형상관리를 할 생각인데 레파지토리를 public으로 열어두려고 한다... 공개하게 되면 spring boot의 application.yml파일에는 아래와 같이 DB 접속 정 teching.tistory.com 지난번에 설정정보를 관리하는 여러 방법을 알아본 후 그 중 Submodule을 사용해서 설정정보를 관리해 보려고 한다. 이를 위해서 submodule에 대한 공부가 필요한것 같아 가볍게 알아보는 시간을 가져보려고 한다. 서브 모듈 서브 모듈이란? 서브 모듈이란, 프로젝트 내부에 다른 프로젝트를 사용해야 하는 경..

Spring boot 설정 정보 외부에서 관리하기 1 - 개요 [내부링크]

Spring boot 설정 정보 관리하기 서버를 github를 사용해서 형상관리를 할 생각인데 레파지토리를 public으로 열어두려고 한다... 공개하게 되면 spring boot의 application.yml파일에는 아래와 같이 DB 접속 정보, API 키와 같은 공개되면 안 되는 민감정보가 포함되어 있어 위험할 수 있다고 생각이 들었다. 이것을 그대로 public 레파지토리 올리면 무수한 해킹 요청이 있을 것만 같았다. server: port: 9999 spring: datasource: url: jdbc:mysql://localhost/mydb username: root password: secret 그래서 설정 정보를 갖고있는 파일을 레파지토리에 포함하지 않고 따로 관리하기 위해서는 어떤 방법이 ..

JAVA 면접 예상 질문 리스트 [내부링크]

요즘 유행하는 chatgpt를 사용해보고 싶어 chatgpt를 사용해서 자바에서 알아둬야 할 것들을 정리해 보았습니다. Java 언어의 특징은 무엇이며, 이를 어떻게 활용할 수 있나요? 플랫폼에 독립적인 애플리케이션 개발: Java는 JVM에서 실행되므로, 플랫폼에 구애받지 않고 애플리케이션을 개발할 수 있습니다. 객체지향적인 설계: Java는 OOP를 지원하므로, 객체지향적인 설계를 통해 코드의 가독성과 재사용성을 높일 수 있습니다. 안정적인 애플리케이션 개발: Java는 예외 처리를 지원하여, 애플리케이션의 안정성을 높일 수 있습니다. 개발 생산성 향상: 다양한 라이브러리와 프레임워크를 제공하므로, 개발 생산성을 향상시킬 수 있습니다. Java에서 객체지향 프로그래밍(OOP)이란 무엇이며, OOP의 ..

디자인 패턴 (Design patterns) [내부링크]

GoF의 디자인 패턴(개정판) 객체지향 소프트웨어를 설계할 때 겪는 문제들에 대한 해결책을 집대성하여 제시하는 『GoF의 디자인 패턴』. 이 책은 디자인 패턴이 무엇인지, 패턴이 어떻게 객체지향 프트웨어 설계에 어떻게 도움을 주는지, 실제 디자인 패턴은 어떻게 되는가 등에 관하여 정리한 내용들을 수록하고 있다. 저자 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스 출판 Pearson 출판일 2011.11.01 디자인 패턴은 GoF(4인의 갱)으로도 알려진 Erich Gamma(에리히 감마), Richard Helm(리처드 헬름), Ralph Johnson(랄프 존슨), John Vlissides(존 블리시데스)이 1994년 출판한 "Design Patterns: Elements of Reusable..

AWS S3 인스턴스 생성 + Spring boot 연동 [내부링크]

버킷 생성 1. 버킷 인스턴스 대시보드에 들어가기 버킷 만들기 클릭 버킷 이름 작성 AWS 리전: 아시아 태평양(서울) 선택 그외에 모든 설정은 그대로 버킷 생성 S3 권한이 있는 IAM 계정 만들기 & 엑세스 키 발급받기 S3 권한이 있는 IAM계정을 발급 받아서 진행하는 것이 보안에 좋아요! 지금은 S3 IAM 계정이 있기 때문에 엑세스 키 발급만 진행하도록 하겠습니다. 1. aws 프로필 - 보안 자격 증명 2. 보안 자격증명에 들어가면 아래 액세스 키 만들기 를 통해서 액세스 키를 만들어 주면됩니다. 비밀번호는 이때밖에 볼수없으니 잘 기록해두거나 csv파일로 잘 저장해두세요! Spring boot에서 연동하기 1. 의존성 추가 pom.xml에 아래 스타터를 추가해주세요. (maven을 기준입니다...

AWS EC2 인스턴스 생성하기 [내부링크]

01_AWS EC2 인스턴스 EC2 인스턴스 생성 1. EC2 인스턴스 생성을 위해서 EC2 서비스 접속 2. 인스턴스 탭 클릭 3. 오른쪽 상단위에 “인스턴스 시작” 클릭 4. 인스턴스 생성 5. 이름 설정 : 인스턴스의 이름 입력하기 6. 애플리케이션 및 OS 이미지 선택: EC2 인스턴스에 설치할 OS를 선택 7. 인스턴스 유형 선택 (현재 jenkins과 micro 유형사이에 오류가 발생해서 jenkins 사용시 micro 시스템에서 가능한지 확인 후 생성 권장) 8. 키 페어 : SSH 연결과 같은 인스턴스 접속 할때 사용할 키 선택 OR 생성 9. 네트워크 설정: VPC, 서브넷 등 네트워크 설정. 일반 사용자라면 건들지 않고 기본 설정으로 사용해도 된다. 10. 스토리지 구성: 볼륨 설정을 ..

Sync(동기), Async(비동기) 와 Blocking(블로킹), Non-Blocking(논블로킹)의 차이점 [내부링크]

얼마전까지만 해도 동기, 비동기와 블로킹, 논블로킹의 차이에 대해 인지하고 있지 않았는데 다 다른것을 의미한다는 것을 알게되었고 좀 더 명확하게 알고자 정리를 하게 되었다. 간단하게 정리를 하자면 두가지의 큰 차이점은 동기/비동기는 프로세스의 수행 순서에 대한 이야기인 반면 블로킹/논블로킹은 입출력(프로세스 유후 상태)에 대한 이야기이다. 동기와 비동기 동기와 비동기는 함수의 제어권과는 관련없이 함수의 동작순서에 초점을 맞춘것이다. 동기 (Synchronized) 먼저 동기를 살펴보자. 동기의 단어의 뜻을 살펴보면 同期 같은 시기, 또는 같은 기간 라는 뜻을 가지고 있다. 즉, 데이터의 요청과 응답이 동시에 일어난다는 뜻이다. 호출하는 A가 호출되는 B가 끝날때까지 신경을 쓰고있다면 이것은 동기함수이다...

자바 코딩테스트를 위한 정리 - 입출력2 (EOF 처리) [내부링크]

EOF란 End of File의 줄임말로 파일의 끝을 뜻합니다. 알고리즘 테스트에선 일반적으로 테스트 케이스의 수를 따로 명시해주지 않고 입력을 가변적으로 받을때 사용하게 됩니다. 예로 '4375번 문제 (문제 제목: 1)'이 있습니다. 이와 같이 문제에서 테스트케이스의 개수 혹은 끝을 명시해주지 않을때 어떻게 처리해야하는지 알아보도록 하겠습니다. 자바의 대표적인 두가지 입력 클래스인 아래 2가지 기준으로 설명하겠습니다. 1. Scanner 2. BufferedReader 1. Scanner Scanner에서 EOF를 처리하는 방법은 hasNext()메소드를 사용해서 처리하는 방법입니다. 해당 메소드는 다음 입력이 있으면 true 없으면 false를 반환합니다. 이를 사용해서 EOF여부를 확인할 수 있습..

자바 코딩테스트를 위한 정리 - 입출력 [내부링크]

입력 1. scanner() 가장 기본적인 입력 클래스이다. import java.util.Scanner; 사용하기 위해서는 패키지를 추가해주어야 한다. Scanner scanner = new Scanner(System.in); 스캐너는 토큰 단위로 동작하는 클래스임을 기억하자.(토큰 단위: 공백/개행 문자로 구분되는 단위) Scanner() 메서드 (반환형) - close(): 입력 종료, 할당받았던 자원들 반납하기 띄어쓰기 단위 - next(): String 읽기 (String) - nextInt(): int 읽기 (int) - nextBoolean(): boolean 읽기 (boolean) - nextByte(): byte읽기 (byte) - nextShort(): short 읽기 (short) -..

백준 1920: 수 찾기 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/1920 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 코드 #https://teching.tistory.com/ import sys def find(a, list): left = 0 right = len(list) while left < right: mid = (left + right) // 2 if list[mid] > a: right = mid elif list[mid] < a: left = mid + 1 e..

웹 서버(WEB), 웹 애플리케이션 서버(WAS), 서블릿, 스레드 [내부링크]

웹 서버(Web Server) HTTP 기반으로 동작 정적 리소스 제공(템플릿), 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 애플리케이션 서버(WAS, Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 - 동적 HTML, HTTP API(JSON) - 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat), Jetty, Undertow 웹 서버와 웹 애플리케이션 서버의 차이 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 하지만 둘의 용어의 경계가 모호하다. - 웹 서버도 프로그램을 실행하는 기능을 포함하기도 함. - 웹 애..

HTTP 알아보기 5 - 캐시, 프록시 캐시 [내부링크]

캐시가 없을 때 같은 데이터를 반복해서 보낼 때 HTTP 헤더의 크기가 1MB, 바디의 크기가 10MB라면 총 11MB의 데이터를 반복해서 전송해야 한다. 따라서 사용자는 반복되는 데이터를 불필요하게 계속 받아야 하므로 로딩 속도가 느려지게 된다. 해당 문제를 해결하기 위해서 캐시라는 기술을 적용하게 되었다. 캐시 클라이언트가 최초로 서버에 요청을 할때 데이터를 정상적으로 보내준다. 헤더에 cache=control: max-age=60 (생명 주기, 초 단위)를 포함하여 보낸다. 클라이언트는 두번째 요청부터는 캐시에 해당 데이터가 유효 상태로 있다면 서버에서 받을 필요 없이 바로 캐시 저장소에서 꺼내서 쓸 수 있게 된다. 캐시 시간이 초과되면 최초로 서버에 요청하는 단계를 반복한다. 정리 캐시 가능 시간..

HTTP 알아보기 4 - 헤더 [내부링크]

HTTP Header header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용) field-name 대소문자 구문 없음 HTTP 전송에 필요한 모든 부가 정보 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보... 표준 헤더가 매우 많음 필요시 임의의 헤더 추가 가능 분류 - General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close - Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosj; ..) - Response 헤더: 응답 정보, 예) Server: Apache - Entity 헤더: 엔티티 바디 정보, ..

HTTP 알아보기 3 - 상태 코드 [내부링크]

HTTP 상태 코드 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational): 요청이 수신되어 처리 중. 2xx (Successful): 요청 정상 처리. 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요할 때 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없을 때 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못하는 상태. 따라서 인식할 수 없는 상태 코드를 서버가 반환하면 클라이언트는 상위 상태 코드로 해석해서 처리하면 된다. 예를 들어, 299번의 모르는 코드가 오면 2xx코드 (Successful, 정상 처리)로 처리하면 된다. 1xx (Infromation..

HTTP 알아보기 2 - 메서드, API [내부링크]

HTTP 메서드 HTTP API를 만든다고 가정해보자. 따라서 회원 정보 관리 API를 만들어 보았다. 회원 목록 조회 (/read-member-list) 회원 조회 (/read-member-by-id) 회원 등록 (/create-member) 회원 수정 (/update-member) 회원 삭제 (/delet-member) 해당 방법처럼 만드는 경우가 있는데 위의 방법은 좋지 않은 방법이다. URI는 리소스 식별!!, URI 계층 구조를 활용해야 한다. 리소스란? - 회원을 등록하고 수정하고 조회하는 것이 리소스가 아님. - 회원이라는 개념 자체가 바로 리소스 리소스를 식별하는 방법 - 회원을 등록하고 수정하고 조회하는 것을 모두 배제 - 따라서 회원이라는 리소스만 식별하면 된다. -> 회원 리소스를 U..

HTTP 알아보기 1 - 특징, 메시지 [내부링크]

HTTP(HyperText Transfer Protocol) 하이퍼텍스트 문서 간 링크를 통해 전송 HTTP 메시지에 모든 것을 전송한다 HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML(API) 거의 모든 형태의 데이터 전송 가능함 서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용한다. 역사 HTTP/0.9 (1991년): GET 메서드만 지원, HTTP 헤더 X HTTP/1.0 (1996년): 메서드, 헤더 추가 HTTP/1.1 (1997년): 가장 많이 사용하는 버전 - TCP 사용 - RFC2068 (1997) > RFC2616(1999) > RFC7230~7235(2014) HTTP/2 (2015년): 성능 개선 - TCP사용 HTTP/3 (2020년~): TCP대신 U..

URI, URL, URN [내부링크]

URI (Uniform Resource Identifier) URI는 로케이터(Locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다. (https://www.ietf.org/rfc/rfc3986.txt - 1.1.3. URI, URL, and URN) Uniform: 리소스를 식별하는 통일된 방식 Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier: 다른 항목과 구분하는데 필요한 정보 URL Locator로 리소스가 있는 위치를 지정한다. 변할 수 있다. 보통 URI라고 말하면 URL을 뜻한다. URL : scheme://[userinfo@]host[:port][/path][?query][#fragment] userinfo@ - 사용자 인증정보 - ..

IP, TCP/UDP, DNS [내부링크]

패킷 교환(IP - Internet Protocol, 인터넷 프로토콜) 독립적인 다양한 형태의 네트워크를 엮어내겠다는 아이디어에서 시작했다. 따라서 기존의 전화망 이외에 위성을 사용한 통신망, 지상의 무선 네트워크도 모두 포괄해야 했기 때문에 선을 연결해서 하는 전화망 타입인 회선교환이 아닌 데이터를 패킷으로 쪼개 교환하는 방법을 택해였다. 이에 따라 다양한 네트워크에서 사용하는 통신 규칙이 (패킷의 틀과 같은) 필요했다. 이렇게 만들어진 것이 바로 IP(Internet Protocol)이다. 다양한 네트워크를 노드라고 부르기로 하였고 모든 노드들을 유기적으로 연결했다. 이러한 노드들을 통해서 나의 메시지(패킷)를 전달하기 위해서는 주소가 필요하다. (마치 우체국을 통해서 우편을 보낼때 상대방의 주소를 ..

피보나치 수를 구하는 다양한 방법 [내부링크]

알고리즘 문제를 풀다 보니 피보나치 수를 구하는 방법이 상당히 많다. 따라서 이 피보나치 수로 배울 수 있는 알고리즘이 다양하기에 한번 정리를 해보려고 한다. 피보나치 수열이란? 기원전 5세기 인도의 수학자 핑갈라가 쓴 책에서 처음 언급 됐으며 유럽에서 레오나르도 피보나치가 토끼 수의 증가에 대해서 이야기 하면서 유명해졌다. 해당 내용은 n번째 달의 토끼 쌍의 수는 첫 달에는 새로 태어난 토끼 한 쌍만이 존재한다. 두 달 이상이 된 토끼는 번식이 가능하다. 번식 가능한 토끼 한 쌍은 매달 새끼 한 쌍을 낳는다. 토끼는 죽지 않는다 이 문제를 통해서 나온 것이 바로 피보나치 수열이다. 첫 번째 달, 두 번째 달 까지는 1쌍이 존재할 것이다. 세 번째 달이 되면서 토끼가 번식이 가능해지면서 2쌍이 되고 3번..

백준 11444: 피보나치 수 6 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/11444 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 코드 # https://teching.tistory.com/ import sys def matrixMultiple(matrix1, matrix2): res = [[0]*len(matrix2[0]) for _ in range(len(matrix1))] for i in range(len(matrix1)): for j in range(len(matrix2[0])): for k in range(len(matrix1[0])): res[i][j] += matrix1[i][k] ..

백준 2740: 행렬 곱셈 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/2740 2740번: 행렬 곱셈 첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개 www.acmicpc.net 코드 #https://teching.tistory.com/ import sys n1, m1 = map(int, sys.stdin.readline().split()) matrix1 = [list(map(int, sys.stdin.readline().split())) for _ in range(n1)] n2, m2 = map(int, sys.stdin.readline().sp..

백준 11401: 이항 계수 3 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/11401 11401번: 이항 계수 3 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오. www.acmicpc.net 코드 #https://teching.tistory.com/ n, k = map(int, input().split()) mode = 1_000_000_007 def pastPow(a, b, c): if b == 0: return 1 elif b == 1: return a % c else: DivCon = pastPow(a, b // 2, c) if b % 2 == 0: return (DivCon * DivCon) ..

프로그래머스 lv2: 괄호 변환(파이썬) [내부링크]

문제: https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 코드 #https://teching.tistory.com/ def isRight(p): score = 0 res = True for i in p: if i == '(': score -= 1 else: score += 1 if score > 0: res = False if score == 0: return res else: return False def sp..

백준 1629: 곱셈 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 코드 # https://teching.tistory.com/ a, b, c = map(int, input().split()) def pastPow(a, b, c): if b == 0: return 1 elif b == 1: return a % c else: DivCon = pastPow(a, b // 2, c) if b % 2 == 0: return (DivCon * DivCon) % c else: return (DivCon * DivCon * pastP..

백준 1780 : 종이의 개수 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 코드 1 #https://teching.tistory.com/ import sys cnt = { -1: 0, 0: 0, 1: 0 } def check(paper, n): if n == 1: return True plag = paper[0][0] for i in range(n): for j in range(n): if plag != paper[i][j]: return False r..

백준 1992: 쿼드트리 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 코드 #https://teching.tistory.com/ import sys res = "" def makeConftti(list): global res tmp = 0 for line in list: tmp += sum(line) n = len(list) if tmp == n*n: res += "1" return elif tmp == 0: res += "0" return #가..

백준 2630: 색종이 만들기 (파이썬) [내부링크]

문제: https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 코드 #https://teching.tistory.com/ import sys cntWhite = 0 cntBlue = 0 def makeConftti(paper): global cntBlue, cntWhite tmp = 0 for line in paper: tmp += sum(line) n = len(paper) if tmp == n*n: cntBlue += 1..

프로그래머스 lv3: 네트워크 (파이썬) [내부링크]

문제: https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 코드 #https://teching.tistory.com/ def dfs(node, n, edge, visited): visited[node] = True for i in range(n): if edge[node][i]: if not visited[i]: dfs(i, n, edge, visited) def solution(n, computers): ..

프로그래머스 lv3: 디스크 컨트롤러 (파이썬) [내부링크]

문제: https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 코드 # https://teching.tistory.com/ import heapq from collections import deque def solution(jobs): n = len(jobs) jobs = deque(sorted([[jobs[i][1],jobs[i][0]] for i in range(n)], key= lambda x: (x[1]..

백준 5430: AC (파이썬) [내부링크]

문제 : https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 코드 #https://teching.tistory.com/ from collections import deque import sys t = int(sys.stdin.readline().rstrip()) for _ in range(t): ops = sys.stdin.readline().rstrip() sys.stdin.readline() # 큐 변환 nums = sys.stdin.readline()[1:-2] reverse = -1 if nums..

프로그래머스 lv3 : 입국심사(파이썬) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 문제 설명 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가..

백준 2004 : 조합 0의 개수(파이썬) [내부링크]

코드 #https://teching.tistory.com/ import sys input = sys.stdin.readline n, k = map(int, input().split()) def countTF(num, d): cnt = 0 div = d while div

백준 1676 : 팩토리얼 0의 개수 (파이썬) [내부링크]

팩토리얼 0의 개수 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 36812 17491 14523 47.923% 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 출력 첫째 줄에 구한 0의 개수를 출력한다. 예제 입력 1 10 예제 출력 1 2 예제 입력 2 3 예제 출력 2 0 코드 #https://teching.tistory.com/ n = int(input()) fac = 1 for i in range(1,n+1): fac *= i fac = str(fac) answer = 0 for i in range(len(fac)-1,-1,-1): if fac[i] != ..

백준 1931 : 회의실 배정 (파이썬) [내부링크]

회의실 배정 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 111245 34066 24345 29.312% 문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의..

백준 17298 : 오큰수 (파이썬) [내부링크]

오큰수 성공 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 512 MB 32990 11047 8074 33.192% 문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. 입력 첫째 줄에 수열 A의 크기 ..

스프링에 대해서 [내부링크]

2000년 초반 자바당 정파 기술 EJB(Enterprise Java Beans)를 표준기술로 사용함. 금융권에서도 잘 사용하고 기술영업도 이것으로 함. 이론적인 것은 매우 좋음(분산기술, 원하는 계층만 더 추가하기도 편함) 하지만 개발비용이 너무 비싸고 구현하기에 너무 어렵고 속도도 느렸다. 또한 EJB인터페이스에 의존하여 코드를 구현해야 했음. 그래서 POJO(Plan Old Java Object) 오래된 순수한 자바로 돌아가자는 의견도 있었음. 이렇게 어렵고 힘들게 개발하다가 로드 존슨이 2002년 Expert One-on-One J2EE Design and Development 출간 EJB 컨테이너를 대체할 수 있고 단순함 후에 Spring으로 발전 또한 개빈 킹이 Hibernate(하이버네이트)..

백준 1912: 연속합 (파이썬) [내부링크]

연속합 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 (추가 시간 없음) 128 MB 96217 32707 22675 32.757% 문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 입력 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. 출력 첫째 줄에 답을 출..

백준 2565 : 전깃줄 (파이썬) [내부링크]

전깃줄 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 21244 9978 7947 46.761% 문제 두 전봇대 A와 B 사이에 하나 둘씩 전깃줄을 추가하다 보니 전깃줄이 서로 교차하는 경우가 발생하였다. 합선의 위험이 있어 이들 중 몇 개의 전깃줄을 없애 전깃줄이 교차하지 않도록 만들려고 한다. 예를 들어, < 그림 1 >과 같이 전깃줄이 연결되어 있는 경우 A의 1번 위치와 B의 8번 위치를 잇는 전깃줄, A의 3번 위치와 B의 9번 위치를 잇는 전깃줄, A의 4번 위치와 B의 1번 위치를 잇는 전깃줄을 없애면 남아있는 모든 전깃줄이 서로 교차하지 않게 된다. 전깃줄이 전봇대에 연결되는 위치는 전봇대 위에서부터 차례대로 번호가 매겨진다. 전깃줄의 개수와 전깃줄들이 두 전봇..

백준 11054 : 가장 긴 바이토닉 부분 수열 (파이썬) [내부링크]

가장 긴 바이토닉 부분 수열 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 31308 15918 12480 50.850% 문제 수열 S가 어떤 수 Sk를 기준으로 S1 < S2 < ... Sk-1 < Sk > Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라고 한다. 예를 들어, {10, 20, 30, 25, 20}과 {10, 20, 30, 40}, {50, 40, 25, 10} 은 바이토닉 수열이지만, {1, 2, 3, 2, 1, 2, 3, 2, 1}과 {10, 20, 30, 40, 20, 30} 은 바이토닉 수열이 아니다. 수열 A가 주어졌을 때, 그 수열의 부분 수열 중 바이토닉 수열이면서 가장 긴 수열의 길이를 구하는 프로그램을 작성하시오..

백준 11053 : 가장 긴 증가하는 부분 수열 (파이썬) [내부링크]

문제 : https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 가장 긴 증가하는 부분 수열 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 94352 36905 24215 37.108% 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} ..

백준 2156 : 포도주 시식 (파이썬) [내부링크]

문제 : https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 포도주 시식 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 90663 30808 22085 32.790% 문제 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모..

백준 10844 : 쉬운 계단 수 (파이썬) [내부링크]

쉬운 계단 수 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 96338 29894 21422 29.090% 문제 45656이란 수를 보자. 이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다. 입력 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 출력 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. 예제 입력 1 1 예제 출력 1 9 예제 입력 2 2 예제 출력 2 17 코드 # https://teching.tistory.com/ n = int(input()) cache = { 1: ..

프로그래머스 lv1 : 신고 결과 받기 (파이썬) [내부링크]

문제 : https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에..

백준 1463 : 1로 만들기 (파이썬) [내부링크]

1로 만들기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.15 초 (하단 참고) 128 MB 183373 58888 37410 31.908% 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 예제 입력 1 2 예제 출력 1 1 예제 입력 2 10 예제 출력 2 3 코드 # https://teching.tis..

프로그래머스 lv3 : 추석 트래픽 (파이썬) [내부링크]

문제 설명 추석 트래픽 이번 추석에도 시스템 장애가 없는 명절을 보내고 싶은 어피치는 서버를 증설해야 할지 고민이다. 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다. 입력 형식 solution 함수에 전달되는 lines 배열은 N(1 ≦ N ≦ 2,000)개의 로그 문자열로 되어 있으며, 각 로그 문자열마다 요청에 대한 응답완료시간 S와 처리시간 T가 공백으로 구분되어 있다. 응답완료시간 S는 작년 추석인 2016년 9월 15일만 포함하여 고정 길이 2016-09-15 hh:mm:s..

H2 데이터베이스 설치 [내부링크]

가볍게 사용하기 좋은 h2 dbms를 설치하는 방법에 대해서 글을 작성해볼까 합니다. h2는 자바로 만들어진 오픈소스 DBMS이다. http://www.h2database.com/html/main.html에 접속하여 다운로드할 수 있다. H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size S..

백준 2579 : 계단 오르기 (파이썬) [내부링크]

계단 오르기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 106925 36619 26518 34.447% 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다. 연속된 세 개의 ..

백준 1932 : 정수 삼각형 (파이썬) [내부링크]

문제 : https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 정수 삼각형 한국어 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 128 MB 57640 32111 24045 58.623% 문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는..

백준 1149 : RGB거리 (파이썬) [내부링크]

RGB거리 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.5 초 (추가 시간 없음) 128 MB 72867 36485 27248 49.755% 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주..

백준 9461 : 파도반 수열 (파이썬) [내부링크]

파도반 수열 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 58944 25357 20753 41.563% 문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있..

프로그래머스 lv2 : 문자열 압축 (파이썬) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60057# 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 문자열 압축 문제 설명 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습..

백준 1904 : 01타일 (파이썬) [내부링크]

01타일 시간 제한 메모리 제한 제출 정답 맞힌 살마 정답 비율 0.75 초 (추가 시간 없음) 256 MB 55826 18282 14608 32.615% 문제 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰인 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0 타일을 두 개 붙인 한 쌍의 00 타일들만이 남게 되었다. 그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수열을 만들 수 없게 되었다. 예를 들어, N=1일 때 1만 만들 수 있고, N=2일 때는 0..

자바 스프링입문5 - 회원 관리 예제 만들기 1 [내부링크]

비즈니스 요구사항 정리 회원 도메인과 리포지토리 만들기 회원 리포지토리 테스트 케이스 작성 회원 서비스 개발 회원 서비스 테스트 비즈니스 요구 사항 정리 데이터 : 회원ID, dlfma 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 일반적인 웹 애플리케이션 계층 구조 회원 도메인과 리포지토리 만들기 hello.hellospring 패키지 아래 두 개의 패키지 domain, repository 생성 domain Member 클래스 생성 package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } publi..

동적 계획법 (파이썬) [내부링크]

기본적인 접근 방식은 분할 정복 알고리즘과 비슷하다. 문제를 부분 문제로 나누어 각 부분 문제의 답을 계산하고, 이 계산한 결괏값을 이용해 원래 문제의 답을 산출한다. 그러나 동적 계획법은 문제를 나눌 때 부분 문제를 최대한 많이 이용하도록 나눈 다음, 주어진 부분 문제의 정답을 한번만 계산하고 저장해둔 뒤 다시 한 번 해당 문제를 풀 때에는 저장해둔 답을 바로 산출하여 속도를 향상한 것이다. 동적 계획벅을 구현하는 방법은 2가지가 있다. 하향식으로 문제를 풀어나가는 메모이제이션(Memoization) (주의 :메모라이제이션(Memorization) 아님!!) 상향식으로 문제를 풀어나가는 타뷸레이션(Tabulation) 즉, 계산했던 걸 저장한다라는 것이 핵심인 것이다. (캐싱이라고도 불림) 말로 하면 ..

백준 9184 : 신나는 함수 실행 (파이썬) [내부링크]

신나는 함수 실행 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 20643 8926 6757 42.008% 문제 재귀 호출만 생각하면 신이 난다! 아닌가요? 다음과 같은 재귀함수 w(a, b, c)가 있다. if a 20, then w(a, b, c) returns: w(20, 20, 20) if a < b and b < c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) otherwise it returns: w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) 위의 함수를 구현하는 것은 매우 쉽다. 하지만, 그대로 구현하면 값을 구..

백준 14889 : 스타트와 링크 (파이썬) [내부링크]

스타트와 링크 시간 제한 메모리 제한 제출 정답 맞힌 살마 정답 비율 2 초 512 MB 52962 26730 15618 47.160% 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치이다. 팀의 능력치는 팀에 속한 모든 쌍의 능력치 Sij의 합이다. Sij는 Sji와 다를 수도 있으며, i번 사람과 j번 사..

백준 14888 : 연산자 끼워넣기 (파이썬) [내부링크]

연산자 끼워넣기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 512 MB 54744 28745 18139 49.371% 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와..

백준 2580 : 스도쿠 (파이썬) [내부링크]

스도쿠 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 57923 16994 10663 27.427% 문제 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루어진 정사각형 판 위에서 이뤄지는데, 게임 시작 전 일부 칸에는 1부터 9까지의 숫자 중 하나가 쓰여 있다. 나머지 빈 칸을 채우는 방식은 다음과 같다. 각각의 가로줄과 세로줄에는 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 굵은 선으로 구분되어 있는 3x3 정사각형 안에도 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 위의 예의 경우, 첫째 줄에는 1을 제외한 나머지 ..

백준 9663 : N-Queen (파이썬) [내부링크]

N-Queen 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 10 초 128 MB 56281 28251 18511 49.675% 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N < 15) 출력 첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다. 예제 입력 1 8 예제 출력 1 92 코드 # https://teching.tistory.com/ n = int(input()) cnt = 0 def nQueen(placed): global n, cnt row = len(placed) if row == n: c..

깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) [내부링크]

깊이 우선 탐색 (DFS : Depth First Search) 대표적으로 백트래킹에 사용한다. 일반적으로 재귀 호출을 사용하여 구현하지만, 단순한 스택 배열로 구현하기도 한다. 구조상 스택 오버플로우를 유의해야 한다. 자동 미로 생성에 많이 사용 되는 알고리즘! 장점 현 경로상의 노드만 기억하면 돼서 저장공간의 수요가 비교적 적다. 목표 노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다. 단점 해가 없는 경로에 깊이 빠질 수 있다. ( 임의 깊이까지만 탐색하도록 만들기! ) 얻어진 해가 최단 경로가 아닐 수도 있다. 왜냐? DFS는 일단 해를 찾으면 탐색이 끝나기 때문이다. 동작 방식 트리나 그래프에서 한 루트로 탐색하다가 특정 상황에서 최대한 깊숙이 들어가서 확인한 뒤 다시 돌아가 다른 루트로 ..

백준 15649 : N과 M (1) (파이썬) [내부링크]

N과 M (1) 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 512 MB 50418 30965 20654 60.574% 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안 되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 2 1 3 1 4 2 1 2 3 2 4 ..

백준 2108 : 통계학 (파이썬) [내부링크]

통계학 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 73606 18796 15066 26.815% 문제 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계 값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그다음 N개의 줄..

정렬 알고리즘 3 : 계수 정렬(Counting sort) [내부링크]

세 번째로 알아볼 정렬 알고리즘은 바로 계수 정렬! 계수 정렬은 수의 범위가 적을 때 사용하면 좋은 정렬 알고리즘으로 배열의 가장 큰 값에 따라 시간 복잡도가 달라진다. 배열의 가장 큰 값이 k라고 한다면 O(n+k)의 시간 복잡도를 갖는다. 즉, 입력에 비해서 원소들의 값의 범위가 적다면 계수정렬을 사용하는 것이 효율적인 방법이 될 수 있다! 방법 1. 입력된 배열중 가장 큰 값(k) 찾기 2. k+1 크기의 0으로 초기화된 배열 생성한다. 이는 입력된 배열의 원소가 각각 몇 개가 있는지 셀 배열이다. 3. 배열의 원소를 하나씩 검사하여 2번에서 생성한 배열의 인덱스에 해당하는 값을 1씩 올려준다. (즉, 각 값이 몇 개가 나왔는지 카운팅 해준다.) 4. 각 인덱스를 값만큼 반복하여 출력한다. 예시 배..

정렬 알고리즘 2 : 병합 정렬(합병 정렬, Merge sort) [내부링크]

두 번째로 알아볼 정렬 알고리즘은 바로 병합 정렬이다! 먼저 동작 방식을 간단하게 살펴보자 폰 노이만이 개발한 알고리즘으로 데이터 크기만 한 메모리가 더 필요하다는 점이 단점이다. 장점은 데이터의 상태에 영향을 받지 않는다는 점이 있다. 즉, 항상 O(n log(n))의 시간 복잡도를 갖는다. n-way 합병 정렬이라고 부르지만 나는 흔히 사용하는 2-way 합병 정렬을 알아보도록 하겠다. 리스트의 길이가 1이면 이미 정렬된 것으로 본다. (1개밖에 없으므로) 정렬되지 않은 리스트를 절반으로 잘라 두 개의 부분 리스트로 나눈다. 부분 리스트에 1, 2번 과정을 반복한다.(재귀 이용) 잘게 쪼개진 부분리스트 들을 임시 리스트에 합병해가면서 정렬한다. 임시 배열에 저장된 결과를 원래 배열에 복사한다. 과정을..

정렬 알고리즘 1 : 버블 정렬 [내부링크]

정렬 알고리즘을 정리하는 시간을 갖고자 한다. 첫 번째로 정리할 정렬 알고리즘은 바로 버블 정렬이다. 가장 기초적인 알고리즘으로 원소의 이동이 거품이 수면으로 떠오르는 모습이랑 비슷하여 지어진 이름이다. 버블 정렬을 실행하면 이러한 모습으로 정렬이 되게 된다. 실질적으론 사용하지 않는 알고리즘이다. 왜 사용하지 않는지는 아래 동작 예시를 보면 알게 된다! 방법 n개의 배열이 들어왔을 때 1번째와 2번째 원소를 비교하고, 2번째와 3번째,... , n-1번째와 n번째까지 정렬한다. 이를 n번 반복하면 된다. 이미 정렬되어있는 배열이 입력된다면 O(n)의 시간이 걸리겠지만 그게 아니라면 최대 O(n^2)의 시간이 걸린다. 예시 5 4 3 8 9 10 2 이러한 배열을 정렬한다면 첫 번째 사이클 (4 5) 3..

백준 10989 : 수 정렬하기3(카운팅정렬) [내부링크]

수 정렬하기 3 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 5 초 (하단 참고) 8 MB (하단 참고) 143911 32743 24277 23.335% 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 10 5 2 3 1 4 2 3 5 1 7 예제 출력 1 1 1 2 2 3 3 4 5 5 7 코드 # https://teching.tistory.com/ import sys # 계수정렬 counti..

백준 2751 : 수 정렬하기2 (파이썬) [내부링크]

수 정렬하기 2 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 163277 44808 30641 30.061% 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 5 5 4 3 2 1 예제 출력 1 1 2 3 4 5 코드 # https://teching.tistory.com/ import sys # 합병정렬 def mergeSort(nums): s..

백준 1018 : 체스판 다시 칠하기 (파이썬) [내부링크]

체스판 다시 칠하기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 57486 26590 21471 46.537% 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8 × 8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 ..

백준 7568 : 덩치 (파이썬) [내부링크]

덩치 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 51660 28631 24532 56.819% 문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"라고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165)라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치..

백준 11729 : 하노이 탑 이동 순서 (파이썬) [내부링크]

하노이 탑 이동 순서 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 49110 24297 18855 49.114% 문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5개인 경우의 예시이다. 입력 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어..

백준 2447 : 별 찍기 - 10 (파이썬) [내부링크]

별 찍기 - 10 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 42832 22404 16550 52.271% 문제 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다. *** * * *** N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다. 입력 첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k <..

자바 스프링입문4 - 정적컨텐츠, mvc, api [내부링크]

서버 동작 방식 1. 정적 콘텐츠 : 서버에서 뭔가 동작하지 않고 페이지를 보여주는 방식 2. 동적 컨텐츠 : 템플릿 엔진 : 서버에서 프로그래밍 후 동적으로 템플릿 엔진을 통해 html을 뿌려주는 방식 모델 1 방식! mvc개념이 생기기 전까지 view에서 처리를 다했었음!! 그래서 view의 코드가 엄청나게 길어짐 mvc : model - view - controller를 통해 html을 동적으로 관리해주는 방식 controller에서 처리를 해서 model에 담아 view를 렌더링! 3. api : 안드로이드, ios와 같이 json데이터 포맷을 이용해 클라이언트에게 전달하는 방식 서버끼리 통신할때도 사용함! 스프링 부트 정적컨텐츠 api https://docs.spring.io/spring-boo..

백준 1002 : 터렛 (파이썬) [내부링크]

터렛 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 141060 29080 23044 21.427% 문제 조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다. 이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다. 조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 ..

백준 4948 : 베르트랑 공준 (파이썬) [내부링크]

https://www.acmicpc.net/problem/4948 문제 풀이 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 베르트랑 공준 한국어 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 256 MB 55293 22140 17998 40.406% 문제 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다. 예를 들어, 10..

백준 1929 : 소수 구하기 (파이썬) [내부링크]

소수 구하기 성공 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 142922 40006 28287 26.791% 문제 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. 출력 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. 예제 입력 1 3 16 예제 출력 1 3 5 7 11 13 코드 m,n = map(int,input().split()) isPrime = [True for _ in range(n+1)] isPrime[0]=isPrime[1]= False for num in range(len(is..

백준 11653 : 소인수분해 (파이썬) [내부링크]

https://www.acmicpc.net/problem/11653 문제풀이 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 소인수분해 시간 제한 메모리 제한 제출 정담 맞힌 사람 정답 비율 1 초 256 MB 46822 25167 19681 52.615% 문제 정수 N이 주어졌을 때, 소인수 분해하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. 출력 N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다. 코드 n = int(input()) while n>1 : for i in range(2,int(n**.5)+1): if n%..

백준 9020 : 골드바흐의 추측 (파이썬) [내부링크]

문제 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티션은 존재한다. 2보다 큰 짝수..

자바 스프링입문3 - View환경설정, 빌드&실행 [내부링크]

Welcome 페이지 만들기!!(정적 페이지) 스프링 부트에서 제공하는 Welcome Page 기능이 있다. "static/index.html"을 만들어두면 자동으로 제공된다! ( https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-welcome-page 해당 페이지에서 자세한 정보 확인 가능!!! ) Spring Boot Features Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and w..

자바 스프링입문2 - 라이브러리 [내부링크]

그래들, 메이븐 같은 빌드 툴들은 의존관계를 관리해준다! 무슨 말이냐면 spring-boot-starter-web의 라이브러리를 내가 가져오면 해당 라이브러리에 필요한 라이브러리들을 자동으로 가져온다!! 그러므로 나는 web만 가져왔는데 자동으로 필요한 라이브러리들을 전부 가져와준다!! 짱짱기능 확인하는 방법 프로젝트 메뉴에 보면 "Extenal Libraries"에 들어가 보면 어떤 라이브러리를 가져왔는지 확인할 수 있다! 또한 가장 왼쪽 아래에 있는 버튼을 눌러보면 모양을 클릭해보면 해당 메뉴가 나오는데 거기서 "Gradle"에 진입하면 우측에 사진과 같이 나오는데 해당 메뉴 중 "Dependencies"에 들어가면 의존관계들을 확인할 수 있다. 라이브러리명에 (*) 표시가 되어있는 것들은 다른 부분..

백준 1978 : 소수 찾기 (파이썬) [내부링크]

https://www.acmicpc.net/problem/1978 문제풀이 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제 주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 입력 첫 줄에 수의 개수 N이 주어진다. N은 100 이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. 출력 주어진 수들 중 소수의 개수를 출력한다. 예제 입력 1 4 1 3 5 7 예제 출력 1 3 코드 import sys sys.stdin.readline() nums = list(map(int,sys.stdin.readline().split..

백준 1011 : Fly me to the Alpha Centauri (파이썬) [내부링크]

문제 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려놓는 영광의 순간을 기다리고 있다. 그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 그 크기와 질량이 엄청난 이유로 최신기술력을 총동원하여 개발한 공간이동 장치를 탑재하였다. 하지만 이 공간이동 장치는 이동 거리를 급격하게 늘릴 경우 기계에 심각한 결함이 발생하는 단점이 있어서, 이전 작동 시기에 k광년을 이동하였을 때는 k-1 , k 혹은 k+1 광년만을 다시 이동할 수 있다..

백준 2839 : 설탕 배달(파이썬) [내부링크]

https://www.acmicpc.net/problem/2839 문제풀이 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬..

자바 스프링입문1 - 프로젝트 생성 [내부링크]

앞으로의 스프링 작성글은 해당 강의를 정리하며 쓴 글입니다.! https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/ [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com https://start.spring.io/ 해당 페이지에 접속하여 새로운 스프링 프로젝트를 생성하는 방법을 알아보도록 하겠습니다. 스프링 기반으로 새로운 프로..

백준 2775 - 부녀회장이 될테야(파이썬) [내부링크]

문제 평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다. 이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1) 층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다. 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다. 입력 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에..

백준 10250 - ACM호텔(파이썬) [내부링크]

https://www.acmicpc.net/problem/10250 문제 풀이 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와줄 프로그램을 작성하고자 한다. 즉 설문조사 결과대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직..

백준 2869 - 달팽이는 올라가고 싶다(파이썬) [내부링크]

https://www.acmicpc.net/problem/2869 문제 풀이 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째..

백준 1193 - 분수찾기(파이썬) [내부링크]

https://www.acmicpc.net/problem/1193 문제 풀이 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 X(1 ≤ X ≤ 10,000,..

백준 2292 - 벌집(파이썬) [내부링크]

https://www.acmicpc.net/problem/2292 해당 문제풀이입니다. 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 시간 제한메모리 제한제출정답맞힌 사람정답 비율 시간제한 메모리제한 제출 정답 맞힌사람 정답 비율 2 초 128 MB 90899 40832 35147 44.852% 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 ..

프로그래머스 lv2 : 피로도(파이썬) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/87946# 해당 문제 풀이입니다. 코딩테스트 연습 - 피로도 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던 programmers.co.kr 문제 설명 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는..

인텔리제이(IntelliJ) 설치하기 [내부링크]

java IDE를 이클립스로 사용하고 있지만, 요즘 대세인 인텔리제이로 갈아타려고 한다! 그래서 인텔리제이의 설치방법에 대해서 알아보았습니다. 먼저 인텔리제이 홈페이지에 들어갑니다. https://www.jetbrains.com/ko-kr/idea/ IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE www.jetbrains.com 다운로드 버튼을 눌러 들어가면 해당 화면이 나오는데 Utimate버전과 Community버전이 있습니다. 간단하게 비교해보자면 Ultimate버전은 기업에서 쓰는 유료버전이고 Community버전은 무료 버전입니다 상세하게 비교하고 싶으신 분들은 해당 페이지를 참고해주세요 https://www.jetbrains.com/ko-kr/produc..

자바 중급17 : 람다(lambda) [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 람다식(익명 메서드) 인터페이스 중에서 메서드를 하나만 가지고 있는 인터페이스를 함수형 인터페이스라고 한다. 스레드를 만들 때 사용하는 Runnable 인터페이스의 경우 run() 메서드를 하나만 가지고 있다. Runnable을 이용해 스레드를 만..

자바 중급16 : 스레드(쓰레드, Thread) 2 - 상태제어(Join, wait, notify), 데몬스레드 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 스레드와 상태 제어 : 스레드가 3개가 있다면 JVM은 시간을 잘게 쪼갠 후 한 번은 스레드 1을, 한 번을 스레드 2를, 한 번은 스레드 3을 실행합니다. 이것을 빠르게 진행하다 보니 모두 동작하는 것처럼 보이는 것. 스레드는 실행 가능 상태인 ..

자바 중급15 - 스레드(쓰레드, Thread) 1 : 생성, 공유객체, 동기화블록(Snchronized) [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 스레드 : 동시에 여러 가지 작업을 수행할 수 있게 하는 것!! (멀티태스킹!!!) 동시에 여러 가지 작업 수행 프로세스(Process) : 현재 실행되고 있는 프로그램 자바 프로그램은 JVM에 실행되는데 이 JVM도 프로그램 중 하나 운영체제 입..

자바 중급14 - 어노테이션(Annotation) [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 어노테이션 : java5에 추가 괸 기능 클래스나 메서드 위에 붙음. @(at) 기호로 이름이 시작 ex)@Override 클래스나 메타코드에 붙인 후, 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션에 설정된 값을 통해 클래스가 좀..

자바 중급13 - 자바IO [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 자바IO : 입출력을 위한 인터페이스와 클래스들 자바IO는 크게 byte단위 입출력과 문자 단위 입출력 클래스로 나뉨 - byte단위 입출력 클래스는 모두 InputStream과 OutputStream이라는 추상 클래스를 상속 받음. - 문자(Ch..

프로그래머스 lv2 : 타겟 넘버(파이썬) [내부링크]

문제 설명 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 1000 이하인 자연수입니다. ..

자바 중급12 - time패키지 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr java.time패키지 : java에서 제공하는 Date, Time API는 부족한 기능 지원을 포함한 여러 가지 문제점을 가지고 있었다. JDK코에서 이런 문제점들을 해결하고 더 좋고 직관적인 API들을 제공하기 위해 새롭게 디자인한 Date, ..

자바 중급11 - Date, Calendar클래스 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr Date : 날짜와 시간을 구하기 위한 클래스 Date클래스(JDK 1.0에 생성), Calendar클래스(JDK 1.1에 생성) Date는 지역화에 대한 부분이 고려되지 않음. - 지역에 따라서 시간, 통화(원, 달러, 엔 등), 언어 등에 대해..

자바 중급10 - Map [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr Map : Key와 Value를 쌍으로 저장하는 자료구조. 키는 중복 불가능, 값은 중복 가능 파이썬의 딕셔너리!!! import java.util.HashMap; import java.util.Iterator; import java.util.Ma..

자바 중급9 - List [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr List : list는 데이터의 중복이 있을 수 있고, 순서도 있다. 배열은 한번 생성하면 크기를 변경 할 수 없었으나, 리스트는 자유롭게 변경 가능하다. import java.util.ArrayList; import java.util.List; ..

자바 중급8 - Set [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr Set : 중복이 없고, 순서도 없는 자료구조. HashSet, TreeSet이 있다. import java.util.HashSet; import java.util.Set; import java.util.Iterator; public class s..

자바 중급7 - Generic [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr Generic : 선언할 때는 가상의 타입으로 선언 후, 사용 시에 구체적인 타입을 설정하여 다양한 타입의 클래스를 이용하는 클래스를 생성할 수 있다. 대표적으로 컬렉션 프레임워크와 관련된 클래스 Box클래스 public class Box { pr..

자바 중급6 - java.util패키지 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr java.util 패키지 : 유용한 클래스들을 가지고 있는 패키지 날짜 관련 클래스 Date, Calendar클래스 Date클래스는 지역화를 지원하지 않는다. (지역화란? 국가별로 현재 날짜와 시간이 다를 수 있는데, 그 부분을 지원하지 못함) 이..

자바 중급5 - Math클래스 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr Math 클래스 : 수학계산을 위한 클래스 생성자가 private으로 되어 있어 new연산자를 이용하여 객체를 생성할 수 없다. 모든 메서드와 속성이 static으로 정의되어 있어 객체를 생성하지 않고도 사용 가능 public class MathE..

자바 중급4 - 스트링 클래스 문제점 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 스트링 클래스 문제점 : String클래스는 문자열을 다룰 때 사용하는 클래스, 불변 클래스이다. 문제가 없는 경우 public class StringExam2 { public static void main(String[] args) { Strin..

자바 중급3 - 스트링버퍼(StringBuffer) [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr 스트링 버퍼 : 아무 값도 가지고 있지 않은 StringBuffer객체. (String클래스는 불변, StringBuffer는 변하는 클래스) public class StringBufferExam { public static void main(St..

자바 중급2 - java.lang 패키지/오토박싱 [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr java.lang : 자바는 기본적으로 다양한 패키지를 지원하는데 그중에서 중요한 패키지 import하지 않고도 사용할 수 있음. wrapper클래스 : 기본형타입을 객체로 변환시킬 때 사용하는 클래스 Boolean, Byte, Short, Int..

프로그래머스 LV1 : 로또의 최고 순위와 최저 순위(자바&파이썬 비교) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/77484 해당 문제 풀이 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨..

프로그래머스 LV2 : 프린터 (파이썬) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42587 문제풀이 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다...

자바 중급1 - Object클래스, equals, toString, hashcode [내부링크]

해당 강의를 듣고 정리한 것입니다 https://programmers.co.kr/learn/courses/9 자바 중급 평가 5.0 17개의 평가 17 0 0 0 0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기 programmers.co.kr Object : 모든 클래스의 최상위 클래스 아무것도 상속받지 않으면 자동으로 Obect를 상속받는다. Object가 가지고 있는 메서드는 모든 클래스에서 다 사용 가능. Object의 대표적 메서드 equals : 객체가 가진 값을 비교. 기준을..

자바 입문하기20 - 문제풀기)약수의 합 [내부링크]

입문하기 과정에서 배운것들을 활용해 해당 문제를 풀어보기 https://programmers.co.kr/learn/courses/5/lessons/457 자바 입문 - 약수의합 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 문제 설명 자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 자연수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 ..

자바 입문하기19 - 사용자정의 exception [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 사용자 정의 Exception : Exception이나 Exception의 자식을 상속받아 만들어진 클래스 클래스의 이름만으로 어떤 오류가 발생했는지 알게 해 더욱 직관성을 높이기 위해서 사용 Exception 클래스를 상속받아 정의한 checked Exception - 반드시 오류를 처리해야만 하는 Exception - 예외 처리하지 않으면 컴파일 오류 발생 Ru..

자바 입문하기18 - throws, throw [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr Throws : 예외가 발생했을 때 예외를 호출한 쪽에서 처리하도록 던져주는 것 public class ExceptionExam2 { public static void main(String[] args) { int i = 10; int j = 0; try { int k = divide(i,j); System.out.println(k); }catch(Arithmeti..

자바 입문하기17 - Exception [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr Exception(예외처리) : 프로그램 실행 중 예기치 못한 가건을 예외라고 함. 예외 상황을 미리 예측하고 처리하는 것을 예외 처리라고 함. 문법 try{ 수행할코드(오류가 발생할 가능성이 있는 블록) }catch(예외클래스 변수명) { 예외 처리 블록 (오류 발생시 실행할 블록) }finally{ 예외 발생 여부에 상관없이 반드시 실행되는 블록 (생략가능) }..

자바 입문하기16 - 내부클래스 [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 내부클래스 : 클래스 안에 선언된 클래스, 중첩된 클래스 혹은 인스턴스 클래스(instance class)라고 불림. 위치에 따라 4가지 형태가 있음 1. 클래스 안에 인스턴스 변수, 즉 필드를 선언하는 위치에 선언되는 경우. 중첩 클래스 혹은 인스턴스 클래스라고 한다. 내부에 있는 Cal 객체를 생성하기 위해서는, 밖에는 InnerExam1의 객체를 만든 후 In..

자바 입문하기15 - 인터페이스 [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 인터페이스 : 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용하는 장치나 시스템 마치 목차처럼 어떤 기능들이 있는지 쭉 나열하는 것. (추상 클래스!!!) 인터페이스 정의 - 추상 메서드와 상수를 정의할 수 있다. - 객체를 생성 불가능 public interface TV { public int MIN_VOLUME= 0; public int MAX_VOLU..

자바 입문하기14 - 클래스 형변환 [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 클래스 형 변환 : 부모 타입으로 자식 객체를 참조하게 되면 부모가 가지고 있는 메서드만 사용할 수 있다. 자식 객체가 가지고 있는 메서드나 속성을 사용하고 싶다면 형 변환해야 한다. - 부모 Car클래스 public class Car { public void run() { System.out.println("Car의 run메서드"); } } - 자식 Bus클래스 ..

자바 입문하기13 - 상속, 접근제한자, 추상클래스, super [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 상속 : 부모가 가진 것을 자식에게 몰려주는 것을 의미 노트북은 컴퓨터의 한 종류 침대는 가구의 한 종류, 혹은 침대는 가구 소방차는 자동차 해당 관계들을 "is a" 관계 혹은 "kind of" 관계라고 함. Car를 상속받은 Bus를 class로 표현하는 방법 부모 클래스 Car public class Car { String name; int number; pu..

자바 입문하기12 - 오버로딩, 오버라이딩, this(), 패키지 [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 메서드 오버 로딩 : 매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러 개 가질 수 있게 하는 기술 메서드 오버 로딩 방법 이름은 같지만 매개변수가 다른 메서드 public class MyClass2 { public int plus(int x, int y) { return x+y; } public int plus(int x, int y, int z) ..

자바 입문하기11 - 생성자, this [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 생성자 : 모든 클래스는 인스턴스화 될때 생성자를 사용한다. 생성자 특징 생성자는 리턴타입이 없음. 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 자동으로 만들어진다. 매개변수가 없는 생성자를 기본생성자라고 한다. 생성자를 하나라도 만들었다면 기본생성자는 자동으로 만들어지지 않는다. 생성자의 역할 생성자가 하는 일은 객체가 될 때 필드를 초기화 하는 ..

자바 입문하기10 - scope, static, enum [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 변수의 스코프 : 프로그램상에서 사용되는 변수들의 사용 가능한 범위 변수가 선언된 블록이 사용범위 public class VariableScopeExam { int globalScope = 10; public void scopeTest(int value) { int localScope = 20; System.out.println(globalScope); System..

자바 입문하기9 - String [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr String클래스 : 자바에서 가장 많이 사용하는 문자열을 표현하는 클래스 생성 방법 1. new연산자를 이용하지 않고 인스턴스 생성 String str1 = "hello"; String str2 = "hello"; - "hello"라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장. ( 상수는 변하지 않는 값을 의미) - String str2="hello"..

자바 입문하기8 - 클래스, 참조타입 [내부링크]

해당 강의를 보고 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 객체지향이란? : 객체들이 상호작용 하도록 프로그래밍하는 것 -객체 : 프로그램을 구성하는 요소 클래스 : 객체를 만들기 위한 틀 예) 객체 - 붕어빵 // 클래스 - 붕어빵 틀 생성 방법 public class 클래스명 { 클래스 내용 } 객체 생성하기 public class CarExam { public static void main(String[] args)..

자바 입문하기7 - for each [내부링크]

프로그래머스 강의를 들으며 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr for each : 배열, 이차배열등 자료구조에서 각 값을 간편하게 받아옴 문법 for(타입 값을받아줄변수명 : 자료구조) 예시 int[] arry = new int[] {10,20,30,40,50}; for(int value: arry) { System.out.println(value); } >> 10 20 30 40 50

자바 입문하기6 - 이차원 배열 [내부링크]

프로그래머스 강의를 들으며 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 2차원 배열 : 배열 안에 배열이 있는 것 2차원 배열 생성 방법 -정수 4개씩 담을 수 있는 배열이 3개 생성 int[][] array4 = new int[3][4]; 2차원 배열에 값을 저장하는 방법 array4[0][2]=10; -array4[0] = 10; 사용시 오류 이유 : array4[0] 은 또 다른 1차원 배열을 가리키는 참조형 변수이기 때..

자바 입문하기5 - 배열 [내부링크]

프로그래머스 강의를 들으며 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 배열 : 같은 데이터 타입을 가진 연속된 메모리 공간으로 이루어진 자료구조 생성 방법 -정수 4개를 저장할 수 있는 배열 int[] array1 = new int[4]; -선언과 동시에 초기화하는 방법 int[] array2 = new int[] {1,2,3,4}; int[] array3 = {1,2,3,4}; 배열에 값을 저장하는 방법(배열의 인덱스는 ..

자바 입문하기4 - 피라미드 만들기 [내부링크]

별로 피라미드 만들기 예시) * *** ***** ******* ********* 먼저 단순하게 *만 출력하는 코드를 만들었다. 줄 수를 나눠주고 해당 줄마다 *의 개수를 늘려야 하기 때문에 for문을 두 번 사용해주어야 한다. (별의 개수는 1, 3, 5, 7,... 홀수로 증가) 해당 내용을 토대로 자바로 구현해보자면 public class MakePyramid{ public static void main(String[] args) { for(int i=0; i * *** ***** ******* ********* 이제 왼쪽에 정렬되는걸 모양을 맞춰주면 된다. 이 부분은 공백 문자(" ")를 사용해 맞춰주면 될 것 같다. 위에서부터 5,4,3,2,1 칸으로 띄어주면 된다. 코드로 구현해보자. publ..

자바 입문하기3 - 반복문 [내부링크]

프로그래머스 자바입문 강의를 보며 정리한 내용입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 반복문 : 실행문을 반복적으로 실행해야 할 떄 사용 while, do-while, for문 사용 while 조건문의 실행 결과가 true일 동안 반복 while(조건문){ 실행문; } 예시 : 1부터 100까지 수의 합 구하기 int total = 0; // i의 값을 누적할 변수를 선언합니다. int i = 1; while(i > 5050 do..

자바 입문하기2 - 조건문 [내부링크]

프로그래머스 강의를 들으며 정리한 것입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 조건문 : 어떤 문장은 수행하고 싶고, 어떤 문장은 수행하고 싶지 않을 때 사용 IF 조건문 : 조건식의 연산 결과에 따라 블록 내부 문장의 실행 여부를 결정할 수 있다. if 문 - 조건식이 true 일 경우에만 실행문이 실행 - if(조건식) 다음의 { } 생략할 경우 실행문은 단 한 줄만 포함 if(조건식){ 실행문; 실행문 } if - else 문..

자바 입문하기1 - 변수와 계산 [내부링크]

프로그래머스 자바입문 강의를 보며 정리한 내용입니다. https://programmers.co.kr/learn/courses/5 자바 입문 자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금 programmers.co.kr 자바의 실행 과정 1. 소스코드 작성 2. 소스코드 컴파일 3. 컴파일된 파일을 JVM으로 실행 JVM으로 실행하기 때문에 운영체제와 독립된 실행환경!! 주석 프로그램 코드와 실행에는 영향을 주지 않는 문장 주석의 종류 구현 주석 - 행 단위 주석( // ) : 해당 행만 주석 처리 ( 이클립스에선 Ctrl + / 명령어로 처리 가능) - 블록단위..

자바를 선택한 이유 & 강의 선택 [내부링크]

자바를 고른이유 나는 백엔드 개발자가 되고 싶은 생각에 다시 프로그래밍언어를 배우고자했고 백엔드 언어에는 다양한 언어와 프레임워크들이 있었다 그 중 가장 많이 사용하는 언어들은 Java(Spring), python(Django), JavaScript(node.js-Express), php(Laravel)이 있다. 그래도 국내에서는 아직 자바를 많이 사용하고 있다고 생각하여 Java를 선택하게 되었다. 강의 고르기 이제 언어를 골랐으니 강의를 선택했다. 여러 무료 강의 중 총 3가지 강의로 추렸는데 첫번째 : https://www.youtube.com/watch?v=oJlCC1DutbA&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 두번째 : https://www.inflearn...

프로그래머스 LV2 : 멀쩡한 사각형 문제풀이 (파이썬) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/62048 에 대한 문제풀이 문제 : 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기..

에라토스테네스의 체(소수 판별 알고리즘) [내부링크]

유명한 소수 개수 찾기 알고리즘 다수의 소수를 찾을때 사용하는 알고리즘으로 하나의 숫자마다 소수인지 판별하는 것보다 효율적이라 많이 사용한다! 소수의 배수는 소수일수가 없다는 점을 이용한 알고리즘으로 2부터 숫자를 높여가며 자기 자신을 제외한 배수를 전부 지우는 방법이다. 방법 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색) 자기 자신을 제외한 2의 배수를 모두 지운다. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색) 자기 자신을 제외한 3의 배수를 모두 지운다. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색) 자기 자신을 제외한 5의 배수를 모두 지운다..