본문 바로가기

분류 전체보기

(386)
백준 1043번 - 거짓말(C++) https://www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 처음 봤을 땐 브루트포스로 전부 확인하는 형식으로 풀었는데 3%에서 틀렸습니다가 발생했다. 그래프 문제라고는 상상을 못했다. 정확히는 유니온 파인드 문제였다. 유니온 파인드 알고리즘은 정확히 공부한 적이 없는데 이번에 공부할 수 있었다. 1. 먼저 각 진실을 알고 있는 자들의 유니온(집합) 번호를 0번으로 지정한다. 2. 파티를 열고 파티를 들어온 1번 사람들과 이후 사람들을 합쳐준다. 3. 이후 각 파티를..
프로그래머스 - 불량 사용자 (C++) https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 백트래킹 조합문제이다. 문제를 해석하는 것이 가장 중요하고 해석만 하면 조합을 구할 줄 알면 쉽게 풀 수 있다. 나중에 한번 더 풀어보면 좋을 문제 #include #include #include #include #include using namespace std; vector user, ban_user; set answerset; bool check[8] = {false,}; bool banCh..
백준 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 ..