본문 바로가기

전체 글1068

[자료구조] C언어 - 다항식(polynomial) 구현 - 객체지향 - C언어로 구현한 다항식(polynomial) 코드이다. 완벽하진 않지만 c에서 객체지향 개념을 넣을 수 있는 기본 베이스는 마련해둔 코드이다. - 글 말고 github으로 보려면 여기를 누르면 된다. - 영어를 잘 못하지만 주석을 영어로 작성했으므로 틀린 표현이 많을 수 있다. (댓글로 알려줘요 ㅠ) - 이하 코드에서 사용된 node.h, list.h, list.c는 '[자료구조] C언어 - 이중 연결 리스트(doubly linked list) 구현 - 객체지향' 글에서 구현한 코드들이다. 위 github에서 보거나, 여기를 눌러 해당 글에서 확인하면 된다. 0. 사용예시 #include #include"polynomial.h" int main(int argc, char* argv[]) { polyn.. 2022. 4. 9.
[자료구조] C언어 - 이중 연결 리스트(doubly linked list) 구현 - 객체지향 - C언어로 구현한 리스트 (doubly linked list) 코드이다. 완벽하진 않지만 c에서 객체지향 개념을 넣을 수 있는 기본 베이스는 마련해둔 코드이다. - 글 말고 github으로 보려면 여기를 누르면 된다. - 영어를 잘 못하지만 주석을 영어로 작성했으므로 틀린 표현이 많을 수 있다. (댓글로 알려줘요 ㅠ) 0. 사용 예시 #include #include #include"list.h" int main(int argc, char* argv[]) { list_t* l = create_list(); printf("--- insert test ---\n"); l->op->insert_to_head(l, "aaa"); l->op->insert_to_tail(l, "bbbb"); l->op->inser.. 2022. 4. 9.
백준 9612 자바 - Maximum Word Frequency (boj 9612 java) 문제 : boj9612 String에 대해 카운팅을 해야 한다. 따라서 HashMap 등을 사용하면 쉽게 계산할 수 있다. 주의점은 동일한 횟수가 존재할 경우, 사전순으로 뒤에 있는걸 택해야 한다. 코드에서 이하의 부분이 해당 역할을 한다. maxStr.compareTo(cur) < 0 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashMap; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in).. 2022. 4. 9.
백준 10090 자바 - Counting Inversions (boj 10090 java) 문제 : boj10090 n개를 입력받으면서 매번 입력받은 값이 k라 하면, 매번 이전까지 나온 수 중 k보다 큰 수가 몇 번 나왔는지만 알면 된다. 머지소트트리, 세그먼트트리, 제곱근 분할법이 이걸 알 수 있는 자료구조들이다(물론 더 있을 수 있다). 별다른 응용없이 해당 자료구조 중 아무꺼나 적용하면 풀리는 문제라 셋 중 맘에 드는걸로 검색해서 배워보자! 개인적으로 구현 난이도는 제곱근 분할법 < 머지소트트리 2022. 4. 8.
[자바] 프로그래머스 - 모의고사 [코딩테스트 연습 Lv1] 문제 : programmers-모의고사 주어진 대로 구현을 하면 된다. 반복문과 배열만 다룰 줄 안다면 풀 수 있다. 이 때 1번, 2번, 3번 수포자의 공통된 부분의 길이가 서로 다른 부분(각각 5, 8, 10)에서 좀 어려울 수 있다. 각자 다른 index 변수를 사용해서 해당 배열의 크기가 됬다면 0으로 변경하는 방식으로 하거나, 3명의 공통부분 길이의 최소공배수인 40번 만큼 배열에 적어둔 후 풀면 쉽게 할 수 있다. 코드적으로 이해가 될 것 같다면 아래와 같이 %(나머지 연산)를 사용해 더 편하게 할 수 있다. 코드 : github /** * 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges */ class Solution .. 2022. 4. 8.
백준 4659 자바 - 비밀번호 발음하기 (boj 4659 java) 문제 : boj4659 풀이가 딱히 필요없다. 주어진 대로 구현할 수 있는 구현력(?)만 있으면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private int type(char c) { switch (c) { case'a': case'e': case'i': case'o': case'u' : return 1; default: return -1; } } private boolean checkIt(String s) { for (int i = 0; i < s.length(); i++) { if (type(s.charAt(i)) == 1) break; if (i == s.le.. 2022. 4. 8.
백준 2041 자바 - 숫자채우기 (boj 2041 java) 문제 : boj2041 배열이랑 반복문만 알면 풀 수 있는 순수 아이디어 문제인데도 다이아 티어를 받은 무서운 문제이다. 별다른 알고리즘적 지식이 필요하지 않으므로 풀기 전에 이 글을 보면 얻어갈 수 있는건 아이디어 뿐이다. 따라서 밑으로 내려 풀이를 보자마자 스포가 되므로, 최대한 스스로 풀어보고 풀이를 보는걸 추천한다(하지만 스스로 풀어봤다면 더이상 풀이가 필요없지) 백준1187번을 같이 풀었던 선배같은 후배와 같이 풀었다. 1187때는 결국 난 못풀었고 후배의 도움으로 풀 수 있었지만 이번엔 내가 먼저 풀이를 찾았다. 기분 좋다. ----- 풀이 스포주의 ----- 내 경우엔 여러 방식으로 해보다가, 결국 해답을 찾은 키 아이디어는 배열에 어떤 수가 들어갈지 고민하기 보다, 차이를 어떻게 배치할지 .. 2022. 4. 7.
종만북 재도전 시작! 알고리즘계의 수학의 정석인 종만북(yes24 링크). 난이도가 높기로도 유명하다. 성격상 마주치는 문제는 모두 풀면서 지나가고 싶었는데, 마치 사칙연산 배우는 수학책에 이해를 돕기 위해 초반에 '사과 3개를 두고 여기서 1개를 먹으면 몇개가 남죠?' 라는 부분조차 이해못한것과 마찬가지로, 이전에 봤을 때는 소개문에 있는 '간단한 문제'를 풀지 못했었다('프로그래밍 대회를 접해 본 적이 없는 분을 위해 간단한 문제를 하나 예로 들어 보겠습니다.' 라고 써있다.). 나만 그런줄 알았는데 상당히 많은 사람들이 늅늅할때 덤볐다가 입구컷 당했다고 한다 ㅋㅋ. 무슨 문제인지 궁금하다면 여기(알고스팟 링크)를 누르면 된다. 그렇게 입구컷을 당하고 어디 구석에 쳐박아뒀던 종만북.. 이전보단 지식이 높아진 지금이라면 좀.. 2022. 4. 7.
백준 2163 파이썬 - 초콜릿 자르기 (boj 2163 python) 문제 : boj2163 쪼갠걸 겹쳐서 자를 수 없으므로, 결국 한땀한땀 자를 수 밖에 없다. 그럼 n x m 조각에 대해 n을 높이, m을 너비라고 생각해보자. 이걸 우선 가로방향으로 n개로 쪼개보자. 이 경우 n-1번 쪼개면 된다. 그리고 그 중 한 개만 세로방향으로 쪼개보자. m-1번 쪼개면 된다. 그런데, m-1번 쪼갠게 처음 n-1번 쪼갠 n개의 조각 하나이므로 총 n개의 조각을 m-1번 쪼개야 한다. 따라서 처음에 가로로 쪼갠 경우, 답은 n-1 + n(m-1) 이 된다. 그럼 처음에 세로로 쪼갠 경우는 어떻게 될까? m-1 + m(n-1)이 된다. 근데 둘다 식을 풀어보면 전자는 n-1+nm-n = nm-1 후자는 m-1+mn-m = nm-1 이다. 따라서 어느쪽을 먼저 자르더라도 nm-1이 .. 2022. 4. 6.
백준 9613 자바 - GCD 합 (boj 9613 java) 문제 : boj9613 우선 모든 쌍을 확인하는게 이 가능할지 확인해보자. n은 최대 100 이므로 모든 쌍을 확인할 경우 O(n^2)이 필요하고, 총 t개의 테스트케이스가 존재하므로 O(100*100^2) 이므로 충분히 가능하다. 그럼 뭐 어렵게 생각할 것 없이 무지성으로 모든 쌍을 확인해보면 된다. 모든 쌍 확인은 예를들어 배열의 길이가 5일 경우 인덱스는 0,1,2,3,4가 존재할 것이다. 그럼 0-1, 0-2, 0-3, 0-4, 1-2. 1-3. 1-4, 2-3, 2-4, 3-4 와 같이 확인하면 된다. 코드의 27~28line을 참고해보자. 그리고 모든 쌍에 대해 각각 GCD를 구해 그 결과를 더해주면 되는데, GCD의 경우 유클리드 호제법을 사용하면 빠르게 구할 수 이다. 유클리드 호제법은 검.. 2022. 4. 6.