Programming 47

[백준/python] 1106번 호텔

1. 문제 이 문제는 호텔의 홍보 비용에 따른 고객 수 증가 정보를 가지고호텔의 고객을 c명 이상 늘이기 위해 투자해야 하는 돈의 최솟값을 구하는 문제이다. 2. 풀이[접근 1 - dfs] 시간초과처음에는 dfs를 활용하여 재귀 형태로 모든 경우의 수를 확인하도록 했다.모든 방법을 확인하다가 고객 수가 c 이상이 될 경우 최솟값을 갱신하고 return하는 형태이다.답을 찾는 데는 무리가 없었으나 시간초과가 떠버렸다.이에 시간을 줄일 수 있는 다른 방법을 고민했다. [접근 2- dp]목표 고객 증가 수인 c에다가 한 번의 투자로 늘어날 수 있는 최댓값인 100을 더해서 dp테이블을 만들었다.혹시 c보다 c+1이 더 비용이 적게 들 수도 있기 때문이다.dp 테이블은 모두 큰 수로 초기화해두고 반복문을 돌렸다..

[백준/python]1259번 팰린드롬수

1. 문제 이 문제는 팰린드롬 수를 찾는 문제이다.팰린드롬 수란 뒤에서부터 읽어도 같은 수이다.2. 접근숫자를 문자 형태로 받아온 뒤, 0인 경우에는 종료한다.나중에 출력할 결과를 same이라는 변수로 만들어 'yes'로 초기화해둔다.숫자길이의 절반, 즉 길이를 2로 나눈 수까지 반복문을 돌려서num[i]와 num[-i-1]이 같은지 확인한다.만약 다른 경우에는 same 변수를 'no'로 바꾸고 반복문을 탈출한다. 처음에는 이상하게 에러가 생겨서 각 변수를 출력해보다가,str에 개행문자 '₩n'이 맨 뒤에 포함되어 생기는 오류임을 발견했다!rstrip()을 추가하여 오류를 해결하였다!! 3. 코드import sysinput = sys.stdin.readlinewhile True: num = str(..

[백준/python] 3980번 선발 명단

1. 문제 이 문제는 선수의 능력치를 고려하여 포지션을 정해 가장 최대의 능력치를 구하는 문제이다.11명의 선수들에 대해 11개 포지션에 대한 능력치를 수치화하여 제시한다.그 숫자들 중 모든 경우의 수를 고려하여 가장 최대의 합을 구하는 문제이다.즉, 전형적인 백트래킹 문제.2. 풀이솔직히 이 문제를 어떻게 풀어야 할지 감이 안 왔다.아직 알고리즘 실력이 부족하기 때문인 것 같다.어떤 상황에서 어떤 알고리즘을 써야 하는지 아직 잘모르는 것 같아서백트래킹 알고리즘을 다시 정리해야겠다고 생각했다.https://jemarque.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9-Backtrackin..

[알고리즘] 백트래킹 Backtracking

최근 코딩테스트 문제를 풀면서 알고리즘 정리가 필요함을 느꼈다.자주 출제되는데 아직 나에게 어려운 백트래킹을 먼저 정리해보려고 한다. 백트래킹 모든 경우의 수를 고려하는 알고리즘 백트래킹은 재귀를 활용해 모든 경우의 수를 확인하는 알고리즘이다.대표적으로 DFS, BFS를 사용하며 코딩테스트에서 잘 다루어지는 알고리즘이기도 하다.시간복잡도는 중복이 가능한 경우, N**2이고 중복이 불가한 경우는 N!이다. 목표한 조건에 도달하는 경우를 탐색하는 것인데,절대 목표에 도달할 수 없다고 판단이 되면 앞으로 돌아가서 다시 그 조건에 맞는 경우를 탐색한다. 1. DFS깊이 우선 탐색트리에서 바닥에 도달할 때까지 한쪽 방향으로만 내려가는 방식으로재귀함수를 사용하여 목표한 바가 나올 때까지 반복한다.일반적으로 모든 경..

[백준/python] 9081번 단어 맞추기

1. 문제 이 문제는 어떤 단어가 주어지고 사전식 정렬을 하였을 때그 바로 다음에 오는 단어를 찾는 문제이다.2. 풀이[접근 1]처음에는 모든 사전식 배열을 다 늘어놓고그 중에서 입력값을 찾은 뒤, 그 다음 값을 출력하는 방식을 생각했다. 1. 순열 라이브러리를 이용해 단어 조합을 모두 리스트에 넣는다.2. 처음 입력한 단어의 인덱스를 찾는다.3. 마지막 단어가 아닐 경우 다음 단어를 출력한다. 역시 코드 자체에 문제는 없었으나 결과가 시간 초과가 떠버렸다.필요 없는 데이터까지 다 구해서일까...바로 다음 순열을 어떻게 찾을지 긴 시간 고민했다. [접근 2]고민의 과정을 거쳐 뒤에서부터 숫자 크기를 비교하는 방식을 발견했다.그 뒤 숫자 위치를 바꾸고 거꾸로 정렬하는 방식으로 문제를 해결할 수 있었다.뒤의..

[백준/python] 11055번 가장 큰 증가 부분 수열

1. 문제 증가 부분 수열이란,수열의 부분 수열 중 증가하는 값으로만 이루어진 수열이다.단, 수열의 순서를 바꾸어서는 안 된다.그 중 합이 가장 큰 것을 구하는 문제이다.2. 풀이[접근 1]처음에는 dfs를 생각해서 문제를 풀었다. 1. 처음 값을 더해준다.2. 해당 값 보다 뒤에 있는 숫자들에 대해 그 값이 더 클 경우 dfs를 실행한다.3. dfs 실행을 마치고나면 기존 결과와 현재까지의 합계 중 큰 값을 결과값으로 바꾼다.4. 값이 더 작은 경우에는 넘어간다. 코드 작성은 잘 하였고 답에는 이상이 없어서 채점을 했는데 결과는 실패..시간 초과가 떠버렸다.그래서 접근 방법을 바꾸었다. [접근 2]이번에는 dp를 활용해서 문제를 풀었다.dp 테이블을 만들어서 각각 인덱스까지의 최대 합을 구한 뒤 그 중..

[백준/python] 20436번 ZOAC 3

백준 20436번 ZOAC 3 1. 문제 이 문제는 쿼티 자판에서 타자를 칠 때 걸리는 시간의 최솟값을 구하는 문제이다.키를 누르는 데 1의 시간이 걸리고 이동하는 데 두 좌표의 거리 (직선 거리 말고 택시 거리) 만큼의 시간이 걸린다.독수리 타법, 즉, 양손의 손가락을 하나씩만 사용하는 타법이고 왼손과 오른손은 한글 자음 모음의 위치로 구분한다.2. 풀이조금 귀찮은 구현 문제였다.쿼티식 키보드에 있는 모든 문자, 즉 알파벳 26개를 모두 배열에 넣어야했다.거리 계산의 간편함을 위해 가장 아래 왼쪽에 있는 'Z'를 (0,0)이라고 생각해서큰 배열 안에 3개의 줄이 있는 이중배열 구조로 키보드를 표현했다. 입력값은 모두 좌표가 아닌 문자로 주어지기 때문에 이걸 좌표로 바꾸는 함수를 만들었다.coordina..

[백준/python] 21918번 전구

백준 21918번 전구https://www.acmicpc.net/problem/21918 1. 문제 전구의 상태를 숫자 0과 1로 표현한다.전구가 꺼진 경우는 0, 켜진 경우는 1이다.전구를 제어하는 명령어 1~4번을 입력된 순서대로 처리한 뒤의 전구 상태를 확인하는 문제이다. 2. 풀이이 문제는 간단한 구현 문제로, 난이도가 쉬운 편이었다.각각의 명령어를 수행하는 코드를 짜서 명령어가 입력된 순서에 맞게 실행만 시키면 된다. 함수형 프로그래밍 구현을 위해 조건문을 사용해 각 경우를 함수 안에 넣었다.반복문을 사용해 명령어들을 입력받은 순서대로 실행했다. 3. 코드처음 시도에서는 평소 자주 사용하던 방식대로 입력 받은 명령어 정보를 배열에 저장했다.그 뒤에 배열에 저장한 각각의 명령어 정보에 대해 순서대..

[React] 이미지 슬라이더 만들기(자동, 무한반복)

프로젝트에서 메인 페이지와 상세 페이지 상단에 이미지 슬라이더를 넣기로 했다. 조건은 두 가지. 1. 화살표 버튼을 눌렀을 때 이동이 가능할 것. 2. 시간이 지나면 자동으로 다음 이미지로 넘어갈 것. - 옆으로 넘어가는 장면 useState와 useEffect가 필요하다.import { useState, useEffect } from 'react'; react-icons를 설치하여 화살표 아이콘을 가져온다.import { IoIosArrowForward, IoIosArrowBack } from 'react-icons/io'; 이미지 슬라이드에 들어갈 이미지들은 배열 형태로 외부에서 props로 받아오도록 한다.export default function ImageSlider({ slides }) 우선 이..

Programming/React 2024.02.01

[CSS] CSS 전처리를 위한 Sass

Sass는 CSS 프로세서입니다. CSS만으로 작성한 코드는 복잡하고 관리가 어렵습니다. Sass는 CSS의 방식은 그대로 적용하되, 기능을 추가하여 관리를 쉽기 해줍니다. 컴파일러를 돌리면 컴파일러가 Sass코드를 CSS 코드로 변환해줍니다. 그래서 Sass를 CSS Pre-processor라고 부릅니다. Sass의 특징 1. 변수 제공 Sass에서 변수는 $ 달러 표시로 사용합니다. 2. 중첩 가능 nav ul li에 스타일을 추가하고 싶을 때 nav 안에 ul을 넣고 그 안에 li를 넣는 방법으로 중첩할 수 있습니다. 3. 연산자 4. partials, imports : 여러 파일에서 CSS를 쓸 수 있게 해주고 불러오게 해줍니다. 5. Mixins 재사용 가능한 코드 여러줄이 있는 변수라고 생각하..