본문 바로가기

분류 전체보기

(336)
백준 1253번 좋다(C++) https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 처음 봤을 때는 N이 그렇게까지 크진 않아서 그리디하게 풀이 가능하지 않을까 했는데 "두 개" 의 숫자로 나타낼 수 있음이 핵심이다. 투포인터로 풀어야하는 문제이다. 1. 먼저 숫자를 정렬한다. 2. lo = 0 hi = n - 1로 설정하고 찾는 수 보다 크면 hi-- 작으면 lo++ 하며 범위를 좁힌다. 3. 예외 케이스는 0 0 1이다. 0 0 1 의 경우 그냥 투포인터로 잡아놓으면 3을 내놓는다. 0은 0, 1로 나타..
Spring Security - 로그인 처리 과정 스프링 시큐리티가 로그인 인증을 하는 로직은 다음과 같다. Http 요청이 들어오고 필터를 거처 마지막에 SecurityContextHolder에 들어간다. 세션에 들어갈 수 있는 오브젝트는 스프링 시큐리티에서 정해져있다. 그것이 위의 있는 Authentication 이다. 이 안에는 유저 정보가 들어있고 유저 정보가 있는 오브젝트 타입은 UserDetail이다. 위 6번에서 알 수 있듯, UserDetatils는 인터페이스로 제공이 된다. 이제 저 인터페이스를 구현해보자 PrincipalDetails로 UserDetails 인터페이스를 구현한다. 이제 구현한 프린시펄디테일을 어떻게 세션에 넣는 걸까? 방법은 간단하다. 간편한 서비스가 이미 구현되어 있기 때문에 우린 그 인터페이스를 구현하여 사용하면 된..
백준 17144번 미세먼지여 안녕!(C++) https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 시뮬레이션, 구현 문제이다. 굳이 따지자면 그래프 탐색까지 포함시킬 수 있겠다. 아무튼 탐색이니까. 문제 자체는 이해하기 쉽다. 미세먼지가 있는 칸은 사방으로 확산되고 공기청정기는 시계방향, 반시계 방향으로 순환한다. 중요한 포인트는 1. 미세먼지는 "동시에" 확산된다. 2. 공기청정기는 행렬의 외부만 회전한다. 동시 확산을 처리하는 것이 중요하다 왜냐하면 0 5 0 0 10 0 0 0 0 이라..
우분투에서 MySql 실행법 MySql 설치는 되어있다는 가정하에 sudo mysql -u root -p 하면 엑세스 거부 에러가 날 수 있다. 이때는 mysql의 경로를 지정해주면 해결된다. 보통은 sudo /usr/bin/mysql -u root -p 이다. 이후 비밀번호를 입력하면 mysql 실행 로그가 뜰 것 이다.
React - 상태 감지(useState), 컴포넌트 플러터에서 상태를 바꾸려면 setState를 하여 페이지를 다시 불러오는 작업을 하는 것이 일반적이다. 그러나 남은 타임세일 시간이라거나 카운트다운 같은 것은 setState로 표현 할 수 없다. 리엑트에서는 어떻게 할까? 다음과 같은 아주 간단한 버튼과 기능을 만들었다. 여기서 더하기 버튼을 누르면 a값이 변화한다. 확인해보면 콘솔에서 보면 확실히 a값은 바뀌고 있지만 렌더링은 되지 않는다. 여기서 실시간으로 바꾸고 싶으면 useState로 값을 관리해야한다. 이렇게 관리하면 리엑트는 a의 값을 실시간으로 감지하고 변화하면 화면에 다시 그려주는 편리한 기능을 제공한다. 상태가 바뀌면 모두 다시 그리게 되는데 이것은 매우 비효율적이다. 이 비효율을 해결하기 위한 방법이 부모자식간의 관계를 따지는 것이다...
백준 10407번 2 타워(C++) https://www.acmicpc.net/problem/10407 10407번: 2 타워 2 타워의 높이 H는\[2^{2^{2^{\cdot^{\cdot^{\cdot 2}}}}}\]에서 숫자 2가 나타나는 횟수로 정의된다. 2 타워의 값은 해당 표현식의 값으로 정의된다. 예를 들어, 높이 1의 2 타워 값은 2이고, 높이 2의 2 타워 www.acmicpc.net 수식을 찾아 모두 저장해놓는 방식으론 시간상으로나 메모리 상으로나 절 대 풀수없다. 조금 더 읽어보니 중요한 포인트는 3으로 나눈 나머지를 출력하는 것이었다. 위 함수는 오일러의 파워타워 함수에서 x에 2를 넣은 모습이다. 먼저 H의 따른 답을 적어보면 다음과 같다. H = 3 에서 4 * 4 mod 3 = (4 mod 3 ) * (4 mod ..
Spring Security - configure, WebSecurityConfigurerAdapter를 사용하여 권한 체크 Spring boot 에서 configure란 "스프링이 돌아가는 설정을 관리하는 객체" 라고한다. 다시 말하면 스프링이 기본으로 돌아가는 기본 설정을 configure 어노테이션을 붙혀 우리가 관리할 수 있다는 말이다. 이는 Bean과는 조금 다른 의미인데, Bean은 Ioc (제어의 역전)에 개발자가 직접 클래스를 삽입하여 사용할 수 있는 것이라면 configure는 아에 규칙을 바꿔버릴 수 있다. 스프링부트에서 로그인 기능을 위해 WebSecurityConfigurerAdapter @EnableWebSecurity 두가지를 사용할 수 있다. 먼저 아래 어노테이션은 시큐리티 필터가 스프링 필터 체인에 등록이된다. 이를 통해 기본적인 스프링 시큐리티 설정이 실행되고 위의 클래스를 상속받으면 여러가지 스..
React - 화면의 변화감지, 배열(map, filter, slice, concat, spread 연산자) 만약 화면의 알림 표시가 왔다고 하자. 그렇다면 화면의 알림표시를 위해 렌더링을 다시해야 할 것이다. 알림 하나 때문에 화면을 전부 다시 그리는 것(렌더링)은 비효율적이다. 리액트 엔진은 컴포넌트를 통해 이를 해결한다. 최상위 렌더링이 Return A 일 때, A { 파란색 return B } 여기서 색을 변화시켰다고 하자 A { 빨간색 return B } 여기서 return A 를 할 경우 B는 어쩔 수 없이 바뀐것이 없어도 다시 렌더링될 것이다. 리엑트는 여기서 B를 검사하여 변화가 있으면 다시 그리고 변화없을 경우 그리지 않는다. 여기서 연산은 렌더링은 안되지만 연산은 된다. 연산을 위해 필요한 것이 바로 불변함수이다. 위는 얕은 복사이다. 즉, b는 새로운 자신의 주소를 갖고 있는 것이 아닌 a를..