반응형

전체 글 126

[JAVA] StringBuilder로 문자열 조작하기

StringBuilder는 자바에서 사용 가능한 문자열과 관련된 주요 클래스 중 하나이다. 이 클래스는 효율적인 문자열 조작 기능이 필요할 때 사용하게 된다. 그렇다면 왜 자바에서는 특별히 효율적인 문자열 조작을 위해 StringBuilder를 사용할까? StringBuilder의 필요성을 파악하기 위해서는 우선 자바에서 문자열을 처리하는 방식을 알아야 한다. 아래 코드를 예로 보자. String str = "abc"; str += "de"; 위와 같이 str에 "abc"를 저장했다가 "de"를 덧붙이면 우리의 일반적인 생각 혹은 C를 공부해 보신 분이라면 C에서는 아래 표와 같이 "abc"가 있던 메모리 공간 뒤에 "de"를 저장하여, 하나의 문자열로 처리하는 것을 떠올릴 것이다. 변경 전 str 'a..

[Hive Helsinki / 42cursus] restrict pointer와 size_t type

42 cursus에 접어들고, 첫 번째 과제인 Libft을 수행하면서 memcpy 함수를 구현하던 중 restrict pointer와 size_t type을 처음 접하게 되었다. size_t type은 이전에도 strlen 등의 매뉴얼 등을 확인하며 본 경험이 있으나 사용해 본 적은 없고, restrict pointer는 처음 보아서 좀 더 기록해보려 한다. restrict pointer restrict 키워드는 메모리 접근을 최적화하기 위해서 사용된다. restrict 키워드가 쓰였다면 각 변수가 같은 메모리 공간이 아니라는 것을 컴파일러에게 알려주려는 것이다. 나도 이런 설명만 봐서는 대체 무슨 말인지 이해가 되지 않았다. 그래서 내가 본 memcpy 함수의 프로토타입과 함께 이야기 하려 한다. 아래..

[백준 10845/C언어] 큐 풀이

백준 10845번 문제를 풀어보았습니다. 백준 10845번: https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 내용은 다음과 같습니다. 큐(Queue)는 대표적인 자료구조 중 하나입니다. 보통 스택(Stack)과 함께 이야기되는데, 큐는 FIFO(Frist In First Out, 선입선출)이고 스택은 LIFO(Last In First Out, 후입선출)를 구현한 대표적인 자료구조에 해당합니다. C언어에서 큐를 구현할 때는 ..

[백준 10816/C언어] 숫자 카드 2 풀이

백준 10816번 문제를 풀어보았습니다. 백준 10816번: https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0 www.acmicpc.net 문제 내용은 다음과 같습니다. 이 문제는 검색이 용이하도록 입력받은 숫자 카드를 저장하는 것이 관건입니다. 하지만 low level languae에 해당하는 c언어의 특성상 검색이 용이한 배열을 만들어 저장하기란 쉽지 않습니다. 그래서 저는 주로 주어지는 숫자를 인덱스, 즉 key값으로 하는 hash ..

[백준 1931번/C언어] 회의실 배정, Merge Sort로 풀이

백준 1931번 문제를 Merge Sort(합병 정렬)을 이용하여 풀어보았습니다. 백준 1931번: https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 문제 내용은 다음과 같습니다. 문제 특성상 먼저 정렬을 해준 후 푸는 것이 유리하기 때문에, Merge Sort를 이용하여 정렬을 해준 후 문제를 풀어주었습니다. 원래는 Linked List를 이용해서 정렬을 했는데, O(n^2) 이상의 복잡도가 나와서 시간 초과가 발생했습니다. 따라서 정렬 중 최악의 경우에 가장 효율적일 수 있는 O(n log n)의 복잡도를 가진 Merge Sort를 이용했습니다. Merge ..

[JAVA] Collection Framework 정리

자바 공부 중 Collection Framework에 대한 내용이 방대하다고 느껴져, 기억할 겸 정리한 것에 대한 기록이다. 아래 책을 공부 중이다. 신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121. 0. Collection Framework (컬렉션 프레임워크) Collection Framework란 널리 알려진 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 만들어진 각종 인터페이스와 클래스들이다. java.util 패키지에 포함되어 있다. Collection Framework는 크게 세 가지로 분류할 수 있는데, List, Set 그리고 Map이 이에 해당한다. List와 Set이 유사하여 이는 Collection interface로 정의되고, M..

[백준 14501번/C언어] 퇴사, 동적계획법(DP, Dynamic Programming)으로 풀이

백준 14501번 문제를 Dynamic Programming (DP, 동적계획법)을 이용하여 풀어보았습니다. 백준 14501번: https://acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 문제 내용은 다음과 같습니다. 이 문제는 앞서 언급한 대로 동적계획법으로 푸는 문제입니다. 혹시 동적 계획법이 익숙하지 않은 분들이라면 더 쉬운 동적계획법 문제부터 차근히 풀어보시는 것을 추천드립니다. 저도 그러한 과정을 거쳤고, 아래 링크 글부터 순서대로 동적계획법 문제들이 쭉 풀이되어 있는 것을 제 블로그에서도 확인하실 수 있습니다. https://programming-diary-ina.tistory.com/7..

[JAVA] Thread 상태

자바 공부 중 스레드 상태에 대한 내용을 자꾸 까먹게 되어 정리한 것에 대한 기록이다. 아래 책을 공부 중이다. 신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121. 1. Thread 상태의 3단계 아래 그림과 같이 Thread는 크게 3가지 상태를 가진다. 첫 번째는 스레드 객체가 새로 생성되는 객체 생성 단계이고, 두 번째는 실행을 기다리고 있는 상태인 실행 대기 상태이다. 실행 대기 중인 스레드들은 CPU 스케쥴링에 따라서 실행상태 실행대기상태를 반복하다가 일시정지가 되기도 하고 다시 실행 대기 상태가 되기도 한다. 이후 run() 메서드가 종료되어 더 이상 실행할 코드가 없으면 종료 상태에 도달하게 된다. Thread 객체 생성 [ NEW ] 실행 대기 [ RUNNABLE..

[백준 1697번/C언어] 숨바꼭질 풀이

백준 1697번 문제를 풀어보았습니다. 백준 1697번: https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 내용은 다음과 같습니다. 저는 이 문제를 동적계획법을 적용하는 문제라고 생각하고 접근했습니다. 결과적으로 보통 제가 접근했던 동적계획법 문제들처럼 배열을 사용하지는 않았지만, 점화식을 활용해 문제를 쪼개서 접근했다는 점에서는 DP를 활용했다고 말할 수 있을 것 같습니다. 제가 처음에 이 문제를 동적계획법을 사..

[백준 2667번/C언어] 단지번호붙이기 풀이

백준 2667번 문제를 linked list와 재귀함수를 사용하여 풀어보았습니다. 백준 2667번: https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 내용은 아래와 같습니다. 이 문제는 어렵다기보다는 이것저것 고려할 게 많아서 좀 번거로운 문제에 가깝다고 느꼈습니다. 2차원 배열을 만들어서 입력을 받아야 하고, 그 안에서 단지의 개수를 셈과 동시에 한 단지 내의 몇 개의 가구가 포함되는지도 세어야 하고, 또 결과적으로는 몇 개의 가구가 각각의..

728x90
반응형