분류 전체보기 112

[백준/python] 15988번 1, 2, 3, 더하기 3

1. 문제이 문제는 1, 2, 3 세 수를 사용하여 어떤 정수의 합을 나타내는 방법의 수를 구하는 문제이다.특이한 점은 합을 나타낼 때 순서가 다르면 다른 방법이라는 것이다.1+2와 2+1은 각각의 방법으로 취급된다. 2. 풀이처음에는 dfs로 단순히 접근하여 모든 경우의 수를 확인하였다.작은 숫자에서는 문제가 없었으나 테스트케이스 중 숫자가 커지면 어마무시하게 recursion이 일어나는 모양이다.재귀 오류를 해결하니 시간 초과가 떠서 다른 방법으로 접근을 시도했다. dfs가 시간초과가 날 때는 bfs 또는 dp 등등 새로운 방법을 시도할 때라는 거다.dp를 사용하여 규칙성을 발견하였다. 처음에는 규칙을 잘못 발견했다.단순히 1, 2, 4, 7로 증가되는 것만 확인하여 각각 차이가 1, 2, 3이니까 ..

[백준/python] 16926번 배열 돌리기 1

1. 문제이 문제는 배열을 반시계 방향으로 R번 회전시킨 결과를 구해 출력하는 문제이다. 2. 풀이귀찮고 오래 걸릴 것 같은 구현 문제였다.풀기 싫어서 이틀은 미루었다..ㅠㅠ 배열에서 어느 위치에 있느냐에 따라 돌렸을 때 자리까지 돌아오는 횟수가 달라진다.최대한 시간을 줄이기 위해 꼭 필요한 만큼만 돌려야겠다는 생각을 했다.즉, 다시 자기 자리에 돌아와 한 바퀴 회전하는 경우를 빼야 한다는 것.전체 길이로 돌리는 횟수를 나눈 나머지 만큼만 돌리면 된다. 2차원 배열로는 어려워서 1차원 배열로 바꾸기로 정했다.좀 지저분하지만 각각의 그룹을 모두 분리해냈고,그 뒤에 1차원 배열 내에서 돌리기를 쉽게 수행했다. 그 뒤 다시 2차원 배열로 바꾸어 출력해주었다. 3. 코드n, m, r = map(int, inpu..

[Next.js] Next.js 설치 오류 code EEXIST, npm cache verify으로 해결

1. 오류상황 프로젝트에서 Next.js를 쓰기로 하여 급하게 배우려던 중,갑자기 EEXIST 오류를 맞닥뜨렸다. 하라는 대로 npx create-next-app tutorial를 입력했는데 왜 안되는 걸까...npm ERR! code EEXISTnpm ERR! syscall renamenpm ERR! path /Users/seon/.npm/_cacache/tmp/3ee0a393npm ERR! dest /Users/seon/.npm/_cacache/content-v2/sha512/06/d8/20f3d7409ea0f8bd5ed1de19703b182aa1b5102a0c77326ad0462d3261bb3f3f4ca6f17a33200964a958a53ea1d0c17b387bd4dfeb7aeb0a0979f0170..

FrontEnd/React 2024.05.14

[백준/python] 14391번 종이조각

1. 문제 이 문제는 직사각형 종이를 한 변이 1인 직사각형 모양의 조각으로 잘라서조각 안의 수를 왼->오, 위->아래로 붙인 수의 합을 최대로 만드는 프로그램을 짜는 문제이다.특이점은 종이의 크기가 최대 4*4로 작다는 점이다.2. 풀이이 문제는 다양한 시도를 했으나 그만큼 실패를 많이 경험했다.처음에는 단순히 생각해서 그냥 가로로 쭉 자른 종이들의 합, 세로로 쭉 자른 종이들의 합,이 두 값을 비교해서 큰 값으로 하면 되잖아? 라고 생각했다.왜냐면 종이를 쭉 이어서 자르지 않고 막 조각내면 자릿수가 작아지니까.근데 이건 잘못된 생각이었다.문제에서 나온 예시와 달리 '0'이 들어가는 경우에 이상한 상황이 생긴다. 예를 들어서, 아래와 같은 종이조각 말이다.0023001299990011 1. 가로로 쭉 ..

[알고리즘] 비트마스킹

백준 14391 종이조각 문제를 풀면서 메모리 초과가 계속하여 떴다.아무리 해도 해결이 되지 않아 검색해보니 비트마스킹이라는 새로운 방법을 쓰는 사람이 많았다.처음 듣는 방법이지만 메모리를 아낄 수 있는 방법이라 종종 쓸 일이 있을 것 같다. 비트마스킹특정 비트를 켜고 끄거나 반전시키기 위해비트 연산에 사용되는 데이터위키 백과에 따르면 비트마스크는 비트 연산에 사용되는 데이터로,다중 비트들을 싱글 비트 연산 작업에서 켜고 끄거나 상호 반전시킬 수 있다. 일단 비트 연산들을 알아보겠다.비트 연산자설명&AND (둘 다 1이면 1 반환)|OR (둘 중 하나라도 1이면 1 반환)^XOR (둘이 서로 다르면 1 반환)~NOT ( 1-> 0, 0->1 반전)left shift (지정한 수만큼 왼쪽으로 비트 이동)>..

[SSAFY 12기] 싸피 12기 비전공자 지원서 접수, SW적성진단 공부법

- 2024년 4월 22일(월) ~ 5월 7일(화) 17시 : 지원서 접수- 2024년 5월 8일(수) ~ 5월 18일(토) : 에세이 제출- 2024년 5월 11일(토) 10시, 13시, 16시 SW적성진단(비전공자)- 2024년 5월 19일(일) 11시, 15시 코딩테스트(전공자)  지원서 접수작년부터 꿈꿔왔던 SSAFY 12기에 지원했습니다.변함 없이 늘 가고 싶던 곳이라 접수 오픈일 오전에 바로 접수해버리기는 했지만그래도 정보를 더 얻어보고자 오프라인 모집설명회도 다녀오고, 또 온라인 설명회도 다시 보고 그랬네요.지원서 접수 기간은 꽤 깁니다.그 안에 홍보도 많이 하는 것 같아요! 지원서 접수 화면에 들어가면 최종학력을 등록하게 됩니다.이때, 학점평균도 들어가야 하니 미리 알고 있으면 접수가 좀 ..

Programming/SSAFY 2024.05.11

[백준/python] 1141번 접두사

1. 문제 이 문제는 접두사X집합의 최대 크기를 구하는 문제이다.주어진 배열에서 어떤 단어가 다른 단어의 접두어가 되지 않는 부분집합을 만들어야 한다.단어의 개수는 최대 50이어서 숫자가 크지 않다. 2. 풀이접두어가 되려면 자신보다 길거나 같은 길이의 문자여야 하므로길이를 기준으로 짧은 길이부터 긴 길이 순으로 정렬을 했다.이후 이중 반복문을 사용하여 가장 짧은 단어부터 시작해 자기 자신 다음 단어부터 가장 긴 단어까지 확인한다.만약 단어 j를 i 단어의 길이 만큼 잘라서 i와 자른 j가 같다면 단어 i는 부분집합에 들어갈 수 없다. 직접 배열 자체에서 그 단어를 삭제하는 것도 방법이지만,결국 출력해야 하는 것은 크기 값 뿐이므로 ans 변수를 새로 만들어 겹치는 단어를 빼주었다.처음에는 n 자체를 변..

[백준/python] 3273번 두 수의 합

1. 문제2. 풀이[접근 1 - 수학적 접근..?]시간초과가 계속 났다 ㅠㅠx // 2 의 값보다 작은 수만 가지고 새 배열을 만들었다.여기에서 각각의 수를 x에서 뺀 값이 기존 배열에 있으면 개수를 추가!처음에 시간초과가 나고 시간을 줄이기 위해 시도한 것1. sys.stdin.readline 사용하기2. sort해서 배열의 x//2 번째 원소까지만 확인하기3. List 의 In 보다는 Set의 In이 더 시간복잡도가 낮기 때문에 set으로 바꿔주기 등등 방법을 시도하였으나 모두 시간초과가 발생했다.이건 알고리즘이 필요한 문제였던 거다ㅠㅠ [접근 2 - 투포인터]백준 문제 아래에 있는 알고리즘 보기를 눌러 투포인터라는 힌트를 얻어냈다.수열을 sort한 뒤에 왼쪽, 오른쪽 끝부터 시작해서 계속 포인터를 ..

[백준/python] 9465번 스티커

1. 문제 이 문제는 스티커를 뗄 때 얻을 수 있는 최대 점수를 구하는 문제이다.그러나 스티커를 떼면 맞닿는 스티커들은 사용할 수 없어진다. 2. 풀이이 문제는 코테 스터디에서 시간을 정해두고 풀었다.20분 정도 소요되어서 풀었다.이전에 풀어봤던 dp 문제들 덕에 금방 풀이 방법을 생각해냈다. 스티커 배열을 입력받고 그것과 같은 형태로 dp 테이블을 초기화한다.자기 자신을 뜯을 경우에는 바로 왼쪽 칸은 뜯을 수 없고, 대각선에 있는 걸 뜯을 수 있다.그래서 자신 + 왼쪽 대각선을 뜯은 값과 왼쪽 칸을 뜯은 값 중 최댓값으로 dp 테이블을 갱신한다.마지막에는 모든 값 중 최댓값을 출력한다.3. 코드import sysinput = sys.stdin.readlinet = int(input()) #테스트케이스f..

[백준/python] 1106번 호텔

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