코딩 38

[Java] 자바에서 난수 생성하기

자바에서는 다양한 클래스를 이용하여, 다양한 방식으로 난수를 생성할 수 있다. 방식 별로 난수의 범위도 다르다. 오늘은 난수 생성 방법들에 대해 정리해보려 한다. 1. Math.random() 메소드 0 이상 1 미만의 double 데이터를 반환하는 명령. (0 // 0 이상 1 미만의 난수 얻기double num = Math.random();// 랜덤 주사위 값 얻기int dice = (int) (Math.random() * 6) + 1; 2. Random 클래스 다양한 형태의 난수를 생성할 수 있는 클래스로 객체를 생성하여 사용한다. 난수를 생성하는 메소드들은 다음과 같다.반환 타입메소드설명booleannextBoolean()boolean형 난수 반환intnextInt()int형 난수 반환intnex..

[백주 2805번/C언어] 나무 자르기

백준 2805번 문제를 merge sort (합병 정렬)을 이용하여 풀어보았습니다. 백준 2805번: https://www.acmicpc.net/problem/2805  문제 내용은 아래와 같습니다.     이 문제는 여러 번의 시간초과를 겪은 끝에 성공했는데, 처음 몇 번 시도가 모두 O(n^2)의 시간복잡도를 가진 코드여서 이를 개선하려는 노력을 많이 했다. 결국 O(NlogN)의 시간복잡도를 가진 merge sort를 활용하여 문제를 해결할 수 있었다.  나무의 개수인 N과 필요한 총 나무의 길이인 M이 터미널 입력으로 주어지면, 자를 수 있는 최대 나무의 높이를 구해서 출력하면 된다. 여기서 자를 수 있는 최대 나무의 높이라는 것은, 해당 높이를 초과하는 길이의 합이 M이상이 되는 최대 높이를 말..

[Java] 네트워크 (Network)

자바 공부 중 네트워크에 관한 내용을 정리한 것에 대한 기록이다. 아래 책을 공부 중이다.신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121.   네트워크 기초  네트워크는 여러 컴퓨터들을 통신 회선으로 연결한 것으로, LAN(Local Area Network)와 WAN(Wide Area Network)가 있다. 우리가 흔히 말하는 인터넷은 WAN에 해당한다. 네트워크에서는 서버와 클라이언트가 데이터를 주고받는다.네트워크에서 서비스를 제공하는 프로그램을 서버(Server), 서비스를 요청하는 프로그램을 클라이언트(Client)라고 하는데, 클라이언트가 서비스를 요청하면, 서버가 처리하여, 다시 클라이언트에게 처리 결과를 응답하는 식이다.   1. IP 주소 IP(Internet ..

[Java] Thread Pool (스레드 풀)

자바 네트워크 구현 관련된 공부 중 Thread Pool에 관한 내용이 다시 헷갈려 정리한 것에 대한 기록이다. 아래 책을 공부 중이다.신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121.   Thread Pool 이란?  Thread Pool(스레드 풀)이란 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 queue에 들어오는 작업들을 스레드가 하나씩 맡아서 처리하는 방식이다. 이는 병렬 작업 처리가 많아지면 스레드 개수가 폭증하여 CPU가 바빠지고, 메모리 사용량이 증가하여 결국 애플리케이션의 성능까지 저하되는 현상을 방지하기 위해 사용된다.  Thread Pool이 작동하는 방식은 다음과 같다. 우선 애프리케이션에서 스레드풀에 작업 처리 요청을 한다. 그러면 ..

[Hive Helsinki / Piscine] C07

C07의 경우 malloc, 즉 메모리 할당과 관련된 내용으로 이루어진다. 메모리 할당은 주로 배열을 사용하고 싶지만, 배열을 선언하는 시점에 배열의 크기가 확정되어 있지 않을 때 사용한다. 관련된 자세한 내용은 아래 글을 참조하시기 바란다. 나는 C언어 공부할 때 해당 교안을 위주로 공부했는데, 잘 정리되어 있어서 완독하고 나면 피신에 나오는 문제들의 난이도가 크게 어렵지 않게 느껴진다.https://modoocode.com/98" data-og-description="모두의 코드 씹어먹는 C 언어 - 작성일 : 2010-08-03 이 글은 94347 번 읽혔습니다. 안녕하세요. 여러분. 정말 멀리 달려 온 것 같네요. 벌써 제 20 " data-og-host="modoocode.com" data-o..

[Java] 스트림(Stream) 요소 처리

자바 공부 중 Stream에 대한 내용이 복잡하다고 느껴, 정리한 것에 대한 기록이다. 아래 책을 공부 중이다.신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121.    Stream(스트림) 이란?  Stream(스트림)은 for문이나 Iterator 외에 컬렉션 및 배열의 요소를 반복 처리 하기 위한 또 다른 방법 중 하나이다. Stream과 Iterator는 유사하지만 아래와 같은 차이를 가진다.1. 외부 반복자인 Iterator 및 for문과 달리 '내부 반복자'로 처리 속도가 빠르고 병렬 처리에 효율적이다.2. 람다식으로 다양한 요소 처리를 정의할 수 있다.3. 중간 처리와 최종 처리를 수행하도록 파이프 라인을 형성할 수 있다.   차이점들을 하나씩 보자. 우선 내부 반복..

[Java] Wrapper Class (래퍼 클래스, 포장 클래스)

자바 공부 중 Wrapper Class에 대한 내용이 헷갈려 정리한 것에 대한 기록이다. 아래 책을 공부 중이다. 신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121. 참고한 블로그 글들이다. https://medium.com/@s23051/%EB%9E%98%ED%8D%BC-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%9E%80-wrapper-class-cc5aa6f7cdd1 래퍼 클래스란(Wrapper Class)? 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어집니다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class… medium.c..

[Hive Helsinki / Piscine] Rush01

Rush01은 주어진 조건에 따라 1, 2, 3, 4의 높이를 가진 막대를 알맞게 배치하는 문제이다. 문제를 이해하는 데까지도 좀 어렵다고 느꼈고, 풀이하는 데는 더욱 오래 걸렸다. 결국 마지막에 사소한 실수와 malloc check를 하지 않은 문제들로 인해서 fail을 받았지만, 결국 출력을 할 수 있게 만드는 데에는 성공했다. 여기서 적는 방법은 피신 이후 내가 오류나 효율성을 고려해서 코드를 수정한 내용이다. 따라서 피신에서의 형식이나 규칙에 어긋나는 부분(금지 함수를 쓰는 등의 제한을 어긴 것은 아니지만, 띄어쓰기나 인자, row 수 제한 등의 규칙은 신경 쓰지 않았다)이 있을 수 있고, 따라서 문제의 접근 방식만 참고하는 편이 좋을 것 같다. 예시 input으로 문제에 대한 설명부터 해보겠다...

[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 함수의 프로토타입과 함께 이야기 하려 한다. 아래..

728x90