본문 바로가기

STUDY

(102)
[알고리즘] SW Expert Academy 10806. 수 만들기 문제 풀이 (사고의 흐름) 문제를 읽어보면, N개의 수 a,b,c....(>=2) 가 주어지고 이 수들을 곱한 값들을 더해서 K를 만드는 문제이다. 이때, K를 만들기위해 수를 더하는 회수를 최소로 해야한다. 처음에 문제를 풀기위해 "답을 구하기 위한 하나의 정확한 로직이 있을것이다" 라는 생각을 해버렸다. 계속 반복문을 돌려가서 정답을 찾아가는 것이 아닌, K에 a,b,c...를 곱하여 만들 수 있는 K보다 작거나 같은 수를 빼고... 남은값에서 이를 다시 반복하면 정답이 나올거라고 생각했다. 하지만 반례가 계속해서 나왔고 로직을 수정해보아도 새로운 반례가 나왔다. 그래서 다시 처음부터 생각을 고쳤다. "답을 한번에 구하는 완벽한 로직은 없다. 최선으로 계속 시도해서 답을 찾아보자". 수를 더하는 회수..
[알고리즘] SW Expert Academy 10033. 카드 뒤집기 문제풀이(사고의 흐름) 문제를 보고 처음에는 어떻게 풀어야할지 바로 감이 오지 않았다. 문자열과 문자열을 바꿀수 있는 동작을 주고, 동작이 최대 몇번 수행되어야 하는지 조건이 주어졌지만, 바로 풀이 코드가 떠오르지 않았다. 이런 상황에서는 샘플을 만들고 이를 조건대로 수행하며 법칙을 찾아내는 편이다. 그래서 예제 문자열을 조건에 따라 동작을 수행하여 보았다. BWBWBW // 시작 문자열 WBBWBW // 동작수행 1 WBWBBW // 동작수행 2 WWBBBW // 동작수행 3 WWBBWB // 동작수행 4 WWBWBB // 동작수행 5 WWWBBB // 동작수행 6 이렇게 샘플을 한번 돌려보니, 바로 직감이 떠올랐다. "모든 수행의 끝에는 결국 모든 W는 왼쪽으로 가고, 모든 B는 오른쪽으로 가는구나!..
3-1) 스프링 MVC 기초: WebApplicationInitializer, WebMvcConfigurerAdapter, @EnableWebMvc, @Controller, InternalResourceViewResolver, jsp - MVC 패턴 MVC 패턴은 다양한 웹 프레인워크에 적용된 디자인 패턴이다. 클라이언트로부터 요청을 받고, 요청에 맞는 처리를 하고, 응답을 만드는 과정을 분리하여 유연하고 효율적으로 코드를 작성할 수 있도록 한다. 이때 요청에 따른 처리를 하는 부분을 Model, 응답을 만드는 부분을 View, 요청을 받는부분을 Controller라고 하고, 각 앞글자를 따서 MVC 패턴이라고 부른다. Model(모델) 어플리케이션의 데이터나 로직을 처리하는 역할 View(뷰) 클라이언트에 반환할 응답을 생성하는 역할 Controller(컨트롤러) 클라이언트의 요청에 따라 모델과 뷰의 호출을 제어하는 역할 Spring MVC는 MVC 패턴을 채택한 프레임 워크로, 스프링 웹 어플리케이션 개발에 필수적으로 사용된다. ..
[알고리즘] SW Expert Academy 10032. 과자 분배 문제 풀이 (사고의 흐름) 문제를 보고 가장 처음든 생각은 N이 K로 딱 나누어 떨어지면 모두 같은 수의 과자를 먹을 수 있다는 것이다. 그리고 자연스럽에 N이 K로 딱 나누어 떨어지지 않으면 어떤지 생각해 보았다. 다르게 말하면 N이 K로 나누었을 때, 나머지 Z(K보다 작다)가 있다는 말이고 Z개의 과자는 Z명의 사람들에게 1개씩 줄 수 있다. 즉, Z명의 사람들은 과자 1개씩을 더 받게되고, K-Z명의 사람들은 과자를 더 받지 못한다. 이 상황에서 과자 수 차이는 1이다. 결론적으로 다음과 같다고 할 수 있다. N이 K로 나누어 떨어질 때(N%K == 0), 과자수 차이는 0 N이 K로 나누어 떨어지지 않을 때(N%K != 0), 과자수 차이는 1 정답 코드 #include iostream int ..
2-2) 스프링 트랜잭션 관리: ACID, Dirty Read, Repeatable Read, Pantom Read, @EnableTransactionManagement, @Transactional, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE - 데이터베이스 트랜잭션 데이터베이스 트랙잭션이란, 데이터관리 시스템에서 사용되는 업무처리 단위를 말한다. 은행에는 송금이라는 기본적인 기능이 있다. 송금은 내부적으로 출금 계좌에서 돈을 꺼내는 과정과, 입금 계좌에 돈을 넣는 과정으로 나누어 볼 수 있다. 여기서 두개의 과정중 일부만 실패하거나 성공하는 경우는 일어나서는 안된다. 이처럼 트랜잭션은 지켜져야하는 조건이 있는데 이를 ACID라고 부른다. - RDB의 특징: ACID 최근 NoSQL과 같은 새로운 형태의 DB가 인기를 끌고 있긴 하지만, 여전히 대다수의 서비스에서는 관계형 데이터베이스(Relational Database), RDB를 사용한다. RDB는 키와 값들의 간단한 관계를 테이블화 시킨 데이터베이스이다. 그리고 RDB에서 지켜져야하는 다..
2-1) 스프링 JDBC: DataSource, H2, SimpleJdbcInsert, NamedParameterJdbcTemplate, BeanPropertyRowMapper, BeanPropertySqlParameterSource - JAVA에서의 DB 접근: JDBC 거의 모든 서비스는 데이터를 기반으로 이루어진다. 따라서 DB에 접근하는 동작이 자주 수행되는데, JAVA에서는 이를 위해 JDBC가 존재한다. JDBC는 JAVA에서 각 데이터베이스에 접근하기위한 인터페이스이다. 실제 코드를 보면 다음과 같이 DB에 접근하여 데이터를 가져올 수 있다. Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { // 1. Connection을 가져오고 conn = dataSource.getConnection(); // 2. 쿼리를 실행할 준비를하고 stmt = conn.prepareStatement("SELECT * FROM Noun001"); ..
1-8) 스프링 리소스(Resource): Resource, ResourceLoader - 스프링 리소스: Resource 추상 클래스 서비스를 개발하다 보면 리소스 파일에 접근할 일이 종종 있다. 설정 정보를 불러오기위해 resources 폴더의 .properties 파일에 접근하기도 하고, 외부 사이트의 이미지 파일을 불러오기도 한다. 스프링에는 리소스에 접근하기 위한 추상클래스 Resource가 존재하고, 각 상황별로 쓸 수 있는 구현 클래스가 존재한다. - 스프링 리소스 편하게 가져오기: ResourceLoader 개발자 입장에서는 상황에 맞는 Resource 구현 클래스를 사용해야 한다는 것 자체가 부담으로 다가올 수 도 있다. 그래서 스프링에서는 ResourceLoader가 존재한다. ResourceLoader는 리소스의 경로를 보고 적절한 Resource 구현 클래스를 사용하고..
1-7) 스프링 프로파일(Profile): @Profile - 스프링 프로파일(Profile) 상용 서비스를 출시하면, 서비스가 운영되고있는 운영 서버와 추가 개발을 위한 개발 서버를 분리하는 것이 보통이다. 개발을 하다보면 새로운 버그가 생길 수 있고, 자주 소스를 새로 배포해야하는 상황이 생기기 때문이다. 따라서 코드 또한 개발서버에서 동작해야하는 코드와, 운영서버에서 동작해야하는 코드가 분기될 수 있다. @Configuration public class DBConfig { ... // 개발 서버용 dataSource // @Bean // public DataSource dataSourceForDev() { // return new EmbeddedDatabaseBuilder() // .setType(EmbeddedDatabaseType.H2) // .setS..