전체 글

웹 프론트엔드 개발자를 꿈꾸고 있습니다 :)
Baekjoon(C++)

[백준] 10814번: 나이순 정렬 C++로 풀어보기

생각 구조체를 사용해서 풀면 될 것 같다. 문제를 풀 때 시행착오를 겪었는데, 처음에는 struct s s1[100005]로 구조체 배열을 선언했었는데, 그러면 코드가 잘 실행되지 않는다. -> 스택 오버플로우가 발생하기 때문! 구조체 배열을 동적 할당하자. 그리고 정렬을 할 때 그냥 sort를 썼었는데, 그냥 sort를 쓰면 동일한 우선순위를 가진 원소들 사이의 상대적인 순서가 보존되지 않는다. -> sort가 아닌 stable_sort를 써야한다. 코드 #include using namespace std; struct s { // 구조체 선언 int age; string name; }; bool compare(const s& s1, const s& s2) { // 나이가 적은 순서대로 정렬 retur..

Baekjoon(C++)

[백준] 10989번: 수 정렬하기 3 C++로 풀어보기

생각 수의 개수가 천만개까지 주어진다. 일반적인 방법을 썼다가는 분명히 시간이든 메모리든 초과가 뜰 것 같다. 그래서 그냥 sort는 안될 것 같고, merge sort를 써보기로 하였다. -> merge sort를 사용해도 메모리 초과가 되었다. 그래서 그냥 sort를 써보았다. -> 당연히 안됐다. 왜 자꾸 메모리 초과가 뜰까? 배열을 천만개를 선언해서 그런가? 그러면 벡터를 써볼까? -> 그래도 안됐다. 그렇다면 주어진 수는 10000보다 작으니, 주어진 수를 10000 크기의 배열에 넣고 그 배열을 순회하면서 배열에 들어간 수만큼 그 숫자를 출력한다. -> 몇번의 실패끝에, 드디어 성공했다. 코드 #include typedef long long ll; // 큰 수가 쓰이므로 int 대신 long ..

Frontend/React

[React] React를 활용하여 시간/분 , 킬로미터/마일 변환기 만들기

밑 내용은 노마드코더의 'ReactJS로 영화 웹 서비스 만들기' 강의 중 일부 내용을 포함하고 있습니다. React에 대해서 자세하고 친절하게 가르쳐주셔서 만족하면서 듣고 있습니다. (밑에 링크로 들어가면 수강할 수 있습니다. 무료 강의 입니다.) https://nomadcoders.co/react-for-beginners ReactJS로 영화 웹 서비스 만들기 – 노마드 코더 Nomad Coders React for Beginners nomadcoders.co 이 강의을 듣다보면 Super Converter를 만들게 되는데, Super Converter는 React의 State를 활용해서 시간/분 , 킬로미터/마일 중 변환하고 싶은 것을 골라 데이터를 입력하면 변환을 시켜주는 프로그램이다. 코드 실행..

Event

SCPC 2023 1차 예선 참가 후기 - 아직 갈 길이 멀다.

SCPC는 삼성전자에서 주관하는 대학생 프로그래밍 경진대회다. 살펴보니 참가비도 없고 예선 참가시간도 24시간이나 줘서 괜찮은 것 같다고 생각해 참여하게 되었다. 알고리즘 문제를 많이 풀지도 않았고 대회에 나가본 적도 없지만, 아는 형이 대회에 참여한다는 말을 듣고 까짓거 해보자는 마음으로 신청을 하게 되었다. 후기 구글에 SCPC 난이도를 쳐보면 1차는 실골골플플 정도라는 글이 나온다. 실버 문제는 꽤 풀어봤지만 골드 문제는 8문제 정도 밖에 안 풀어 봤기에 일단 한 문제를 풀고 나머지 두 문제를 풀어보고, 남은 두 문제는 쳐다보지 않기로 결심했었다. 위에 말 그대로 되었다. 1번 문제는 어찌저찌 풀었다. 사실 1번도 쉽진 않아서 꽤 푸는 데 시간이 걸렸다. 2번 문제는 아이디어가 어렴풋이 떠오르기는 ..

Baekjoon(C++)

[백준] 15665번: N과 M (11) C++로 풀어보기

생각 앞선 N과 M 문제처럼 백트래킹을 사용하면 된다. 백트래킹(backtracking)이란? : 해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말합니다. 최적화 문제와 결정 문제를 푸는 방법이 됩니다. 출처 : https://chanhuiseok.github.io/posts/algo-23/ 알고리즘 - 백트래킹(Backtracking)의 정의 및 예시문제 이번에 살펴볼 개념은 백트래킹에 관한 내용입니다. chanhuiseok.github.io 만약 백트래킹에 대해서 더 자세히 배우고 싶다면 바킹독님의 강의를 듣는 것을 추천한다. 바킹독 백트래킹 강의 다른 점은 같은 수를 여러 번 골라도 된다는 점이다. 그렇다면 수가 사용되었는 지 검사하는 부분은 빼도 된다. 그리고 예제 ..

Baekjoon(C++)

[백준] 2630번: 색종이 만들기 C++로 풀어보기

생각 재귀를 사용하면 될 것 같다. 1. 사각형을 4분면으로 나눠서 거기서부터 루프를 돌면서 0인지 1인지 확인한다. 2. bool 변수를 두개 만든다. 하나는 루프를 돌 때 한 번이라도 1이 나오면 false(흰색 사각형이 아니라는 뜻), 또 하나는 루프를 돌 때 한 번이라도 0이 아니면 false(파란색 사각형이 아니라는 뜻.)이다. 3. 그리고 재귀를 사용해서 흰색 혹은 파란색 사각형을 찾을 때까지 계속 탐색한다. 4. 두 bool 변수 중 하나라도 true가 나오면 사각형을 찾은 것이므로 재귀를 그만둔다. 5. 파란색 사각형이면 파란색 사각형의 개수를 나타내는 변수에 1을 더하고, 흰색 사각형이면 흰색 사각형의 개수를 나타내는 변수에 1을 더한다. 6. 모든 과정이 다 끝나면 하얀색 색종이의 개수..

Baekjoon(C++)

[백준] 7562번: 나이트의 이동 C++로 풀어보기

생각 BFS를 사용하여 푸는 문제이다. 일단 나이트는 한 칸을 이동한 후 바라보는 방향의 대각선으로 이동할 수 있다. 따라서 이동은 X = { 1 2 2 1 -1 -2 -2 -1} Y = { 2 1 -1 -2 -2 -1 1 2} 이렇게 설정할 수 있다. (오른쪽으로 갈수록 x가 커지고, 아래쪽으로 갈수록 y가 커진다고 가정했다.) dist 배열을 만들어서 지금 내가 몇번 이동했는지 배열에 입력해야겠다. 코드 #include using namespace std; int board[305][305]; int dist[305][305]; // 해당 칸을 방문했는지 여부를 저장 #define X first #define Y second // pair에서 first, second를 줄여서 쓰기 위해서 사용 int..

Baekjoon(C++)

[백준] 11050번: 이항 계수 1 C++로 풀어보기

생각 일단 이항 계수가 무슨 뜻인지 몰라서 검색을 해봤다. 이항 계수는 nCk 였구나. 고등학교 확통 시간 때 배운 적이 있다. 문제 조건에서 0 > k; int ans = factorial(n) / ( factorial(k) * factorial(n - k) ); cout

Life/음악

[음악추천] 제이클레프(Jclef) - 으악!(듣기/라이브) | 우울을 대하는 따뜻한 가사

Jclef - 으악! 듣기 고등학생 때 나는 사운드클라우드(이하 사클) 앱으로 음악을 듣곤 했었다. 사클을 둘러보다 보면 평소에는 들어보지 못했던 좋은 곡들이 있어서 좋았다. 이 노래는 가사가 좋다. 이 노래도 사클의 알고리즘의 파도를 타다가 우연히 발견했다. 처음에 이 노래를 들었을 때 제목이 '으악!'이라는 것에 놀랐고, 제이클레프의 음색이 너무 좋아서 놀랐고, 또 가사가 좋아서 놀랐다. 우울에 관해 직접적으로 다루면서도 상대방을 존중하는 가사가 마음에 들었다. 노래를 시작하면 나오는 '우울을 숨기지 않아도 되는 세상이지', 그리고 중간에 나오는 '함부로 너의 상처의 깊이를 가늠한다 말하지 않을게' 이런 가사들을 처음 들었을 때 '이런 노래도 있네'하며 신기해했던 기억이 난다. 그 때까지 들었던 힙합..

Baekjoon(C++)

[백준] 2798번: 블랙잭 C++로 풀어보기

생각 맨 처음 든 생각: 벡터로 입력받아서 오름차순으로 정렬한 다음, M/3과 가장 가까운 수를 찾아서 그 수와 양 옆에 있는 수를 더한 값을 구하면 될 것 같다. -> 정렬했을 때 붙어있는 세 값의 합만이 정답이 아니다. 반례가 있으므로 틀렸다. 두번째 든 생각: 벡터로 입력받아서 오름차순으로 정렬한 다음, (*it) + *(it+1) + *(it+2)가 m보다 클 때를 찾아서 그 때 *(it-1) + *it + *(it+1)을 구하면 될 것 같다. -> 아까 위에 말했던 것처럼 정렬했을 때 붙어있는 세 값만이 정답이 아니다. 역시 틀렸다. 붙어있는 값들의 합만이 정답이 아니다. 그러면 어떻게 해야될까? -> 삼중루프를 돌려서 m과 가장 가깝지만 m보다 작은 값을 찾는다. 여기서 주의해야 할 점은 삼중..

퀵차분
QC's Devlog