Projects
-
[안드로이드 sns앱 만들기] NearBy 실행 화면 (3)
1. 로그인 / 회원가입 기능 이메일과 비밀번호를 입력하여 계정을 생성합니다. 이메일이 형식에 맞지 않거나 비밀번호가 6자리 이상이 아니면 파이어베이스에 계정이 생성되지 않도록 하였습니다. 회원 가입을 완료하면 Firestore database의 users 컬렉션에 해당 계정의 userId 이름으로 된 문서가 새로 생성됩니다. 이후, 프로필 사진을 갤러리에서 불러와 프로필 사진과 닉네임을 설정할 수 있습니다. 프로필 사진 설정 시, 사용자가 올린 사진을 바로 화면에 적용하는 방식을 이용해, 사용자의 편의성을 높였습니다. 이때 닉네임 중복 확인을 하는데, 중복된 닉네임이 있다면 중복되었다는 토스트를 띄워줍니다. 2. 메인 페이지 bottom navigation을 구현하였습니다. mainListFragmen..
2023.12.27 15:15 -
[안드로이드 sns앱 만들기]NearBy 디자인,와이어 프레임(2) 2023.12.16 09:42
-
[안드로이드 sns앱 만들기]NearBy 프로젝트 개요,기획(1)
(사용자 인터페이스 및 실습) 수업에서 진행한 프로젝트입니다. 시연영상 기획 ✅ 기획 의도 장소를 중심으로 추억을 기록하고, 공유하고 싶어하는 사람들 보다 내 주변에서 일어나는 일을 공유할 수 있음. ✅ 핵심 기능 사진,텍스트,날짜,위치 등을 담은 게시물을 자신의 위치에 남긴다. 내 주변의 소식을 공간 중심으로 알 수 있음 새로운 장소에 갔을 때 그 지역의 소식과 정보를 알 수 있음(여행 갔을 때 맛집을 찾거나, 놀거리를 찾는다.) 게시물을 볼때 여러가지 조건을 이용해 원하는 게시물을 찾을 수 있다. 특정 날짜의 게시물 특정 태그의 게시물 특정 거리의 게시물 유저들은 좋아요,댓글등을 이용해 소통 할 수 있음 팔로잉 기능을 이용해 내가 팔로잉한 사람들의 게시물을 확인할 수 있음 게시물을 올릴때는 공개범위를..
2023.12.16 02:44
Algorithms
-
[알고리즘] KMP알고리즘 (문자열 검색 알고리즘)
KMP 알고리즘 이란주어진 텍스트 문자열에서 특정 패턴 문자열이 등장하는 위치를 효율적으로 찾는 데 사용됩니다. KMP 알고리즘은 패턴 매칭의 각 단계에서 이미 비교된 정보를 활용하여 불필요한 비교를 줄임으로써 검색 속도를 높이는 방식으로 작동합니다.KMP 알고리즘 구현 코드public class KMP { // KMP 알고리즘을 사용하여 패턴을 검색하는 메서드 public static void KMPSearch(String pattern, String text) { int M = pattern.length(); int N = text.length(); // 부분 일치 테이블을 생성합니다. int[] lps = new in..
2024.06.17 16:18 -
[알고리즘] 선택 알고리즘 - 최악의 경우 선형 시간 선택 알고리즘
숭실대학교 컴퓨터학부의 알고리즘 수업을 들으며 정리한 내용입니다.참고교재: 쉽게 배우는 알고리즘(문병로)선택 알고리즘 1.선형 시간 선택 알고리즘(QuickSelect)2.최악의 경우 선형 시간 선택 알고리즘 최악의 경우 선형 시간 선택 알고리즘앞서 주어진 리스트에서 k번째로 작은(또는 큰) 요소를 찾는 선택 알고리즘을 구현했습니다.하지만 최악의 경우, 선택한 기준 원소가 항상 최솟값이나 최댓값이 되어, 분할이 매우 불균형하게 이루어지면 재귀 호출이 깊어져 Θ(n²) 시간이 걸립니다. 이를 해결하기 위해서 Median of Medians 알고리즘을 적용해 Θ(n)의 시간 복잡도를 보장할 수 있습니다. Median of Medians 알고리즘 단계그룹화:주어진 배열을 5개씩의 그룹으로 나눕니다. 마지막 ..
2024.02.26 16:29 -
[알고리즘] 선택 알고리즘 - 선형 시간 선택 알고리즘(QuickSelect)
숭실대학교 컴퓨터학부의 알고리즘 수업을 들으며 정리한 내용입니다.참고교재: 쉽게 배우는 알고리즘(문병로)선택 알고리즘 1.선형 시간 선택 알고리즘(QuickSelect)2.최악의 경우 선형 시간 선택 알고리즘 선택 알고리즘이란 선택 알고리즘은 주어진 리스트에서 k번째로 작은(또는 큰) 요소를 찾는 알고리즘을 의미합니다. 이 알고리즘은 다양한 방법으로 구현될 수 있습니다. 선형 시간 선택 알고리즘은 최악의 경우에도 O(n)의 시간 복잡도를 가지는 알고리즘입니다. 이 알고리즘의 대표적인 예는 QuickSelect입니다. QuickSelect는 QuickSort 알고리즘을 기반으로 하며, 분할-정복 방식을 사용합니다. 피벗을 선정하고 이를 기준으로 리스트를 두 부분으로 나눈 후, k가 어느 부분에 있는지에 ..
2024.02.26 16:18 -
[알고리즘]정렬-기수 정렬(Radix Sort)
숭실대학교 컴퓨터학부의 알고리즘 수업을 들으며 정리한 내용입니다.참고교재: 쉽게 배우는 알고리즘(문병로)기본적인 정렬 알고리즘 O(n^2)1.선택정렬2.버블정렬3.삽입정렬고급 정렬 알고리즘 O(n*logn)1.병합정렬2.퀵정렬3.힙정렬특수 정렬 알고리즘 O(n)1.계수정렬2.기수정렬 기수 정렬(Radix Sort)은 정수들의 정렬을 위해 사용하는 알고리즘 중 하나입니다. 비교 기반의 정렬 알고리즘이 아니라, 각 숫자의 자리수를 기준으로 정렬을 수행하는 방식을 사용합니다. 기수 정렬의 시간 복잡도는 O(NK)입니다. 여기서 N은 정렬할 숫자의 개수, K는 숫자의 최대 자리수입니다. 따라서 데이터의 개수가 많고, 숫자의 범위가 클 경우에는 다른 정렬 알고리즘에 비해 빠른 성능을 보여줍니다.하지만 기수 정렬..
2024.02.14 17:07 -
[알고리즘]정렬-계수 정렬(Counting Sort)
숭실대학교 컴퓨터학부의 알고리즘 수업을 들으며 정리한 내용입니다.참고교재: 쉽게 배우는 알고리즘(문병로)기본적인 정렬 알고리즘 O(n^2)1.선택정렬2.버블정렬3.삽입정렬고급 정렬 알고리즘 O(n*logn)1.병합정렬2.퀵정렬3.힙정렬특수 정렬 알고리즘 O(n)1.계수정렬2.기수정렬 계수 정렬(Counting Sort) 이란계수 정렬(Counting Sort)은 정수나 정수로 변환할 수 있는 자료에 대해서만 적용 가능한 효율적인 정렬 알고리즘입니다. 이 알고리즘의 작동 방식은 입력의 범위가 제한적일 때 매우 효과적이며, 시간 복잡도는 O(n)입니다. 계수 정렬의 기본 아이디어는 각 숫자를 계산(count)하고, 이를 기반으로 정렬된 배열을 생성하는 것입니다. 계수 정렬(Counting Sort) 과정계..
2024.01.13 19:14
BOJ
-
[백준][JAVA] 1305번: 광고
https://www.acmicpc.net/problem/1305문제해석문자열에서 가장 짧은 패턴의 길이를 찾는 문제KMP 알고리즘과 가장 짧은 패턴은 (문자열길이 - LSP배열에서의 마지막 요소)라는 것을 알면 쉽게 풀 수 있다.풀이LPS 배열이란?LPS(Longest Prefix which is also Suffix) 배열은 주어진 문자열의 접두사(prefix)와 접미사(suffix)가 일치하는 가장 긴 부분 문자열의 길이를 저장한 배열입니다.참고: https://mode-creative.tistory.com/25 [알고리즘] KMP알고리즘 (문자열 검색 알고리즘)KMP 알고리즘 이란주어진 텍스트 문자열에서 특정 패턴 문자열이 등장하는 위치를 효율적으로 찾는 데 사용됩니다. KMP 알고리즘은 패턴 ..
2024.06.17 16:32 -
[백준][c++] 2206번: 벽 부수고 이동하기
2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 문제 해석 N*M 배열의 1,1 에서 N,M까지의 최단경로를 찾아내는 문제 0은 벽이 없고 1은 벽이 있는 칸 벽은 최대 한번까지 부술수 있다. 풀이 큐를 이용한 BFS(너비 우선 탐색)으로 최단경로를 찾았습니다. 코드 #include #include #include #include #include using namespace std; //입력부 static int n,m; static int least = INT_MAX; //이동 횟수..
2024.02.19 15:49 -
[백준][c++] 12738번: 가장 긴 증가하는 부분 수열 3
문제 해석 주어진 수열 안에서 가장 긴 증가하는 부분 수열의 길이를 구하는 문제 입니다. 풀이 먼저, 숫자의 개수 N을 입력받습니다. N개의 숫자를 입력받아 numbers 벡터에 저장합니다. lis라는 벡터를 생성하고 첫번째 숫자를 추가합니다. 이 벡터는 가장 긴 증가하는 부분 수열을 저장하는 데 사용됩니다. numbers 벡터의 두 번째 원소부터 마지막 원소까지 순회하며, 현재 숫자가 lis의 마지막 원소보다 크면 lis에 추가합니다. 이는 현재 숫자가 lis에 포함될 수 있음을 의미합니다. 만약 현재 숫자가 lis의 마지막 원소보다 작다면, 현재 숫자가 들어갈 수 있는 lis 내의 위치를 이진 탐색으로 찾아서 그 위치의 값을 현재 숫자로 업데이트합니다. 이는 lis를 최대한 작은 값으로 유지하면서 길..
2024.01.10 16:57 -
[백준][c++] 1918번: 후위표기식
https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 문제 해석 중위 표기식을 후위표기식으로 변환하여 출력하는 문제입니다. 후위 표기식변환은 스택(stack)을 이용합니다. 풀이 각 문자에 대해 다음과 같은 작업을 수행합니다 문자가 문자나 숫자(즉, 피연산자)인 경우, 결과 문자열에 바로 추가합니다. 문자가 여는 괄호 '('인 경우, 이를 스택에 넣습니다. 문자가 닫는 괄호 ')'인 경우, 스택에서 여는 괄호 '('가 나올 때까지 문자를 pop하..
2024.01.08 00:50 -
[백준][c++] 11003번: 최솟값 찾기
문제 해석 각 슬라이딩 윈도우 크기 내에서 최소값을 출력하는 문제입니다. 풀이 벡터와 덱을 이용해 해결했습니다. 각 D(i)에 대해 다음을 반복합니다. 현재 추가되는 A(i)와 dq.back(덱에서 가장 큰 수)를 비교하여 A(i)가 더 작다면 dq.back을 pop함 A(i)를 인덱스와 함께 back에 추가 dq.front가 윈도우 크기를 벗어났다면 pop함 dq.front를 출력 코드 #include #include #include using namespace std; int main() { //입출력 최적화 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //입력부 int n,l; cin >> n >> l; vector a(n); ..
2024.01.05 16:26
Programing Language
-
[구현 과제] 재귀하강 파서 구현
프로그램 개요l 본 프로그램은 EBNF로 문법이 정의되는 언어를 위한 Recursive-Descent Parser를 C/C++, Java, Python으로 각각 구현한 프로그램임, 프로그램은 아래의 EBNF문법을 모두 구현함https://github.com/Lee-min-gue/study/tree/2cdd07996137c7e6db9bca71875fd754e658a05f/programming_language/my%20recursive%20descent%20parser프로그램 주요 로직사용자 입력 처리:프로그램 실행 시 사용자의 입력을 한 줄씩 받습니다.사용자가 'exit'을 입력할 때까지 계속해서 입력을 받습니다.전역 변수 및 함수:전역 변수로는 pos (커서의 위치)와 token (토큰)이 있습니다...
2024.05.04 14:13 -
[프로그래밍 언어론] 2.프로그래밍 언어 의미론
용어lexeme(어휘소): 문장에서 가장 작은 단위의 의미구조Token: lexeme의 종류언어의 일반적인 정의Recognizers입력 문자열을 읽고 언어의 어느 부분에 속하는지 확인컴파일러의 syntax analysisGenerators언어의 문장을 생성함Generator와 비교함으로써 특정 문장의 구문법이 맞는지 확인할 수 있음Context-Free Grammars (CFG)Terminal 심볼 집합: T작성법이 문법 규칙에 의해 정해져 있지 않음, 구문적 변수 역할, 왼쪽에 위치 가능Nonterminal 심볼 집합: N작성법이 문법 규칙에 의해 정해져 있음, 오른쪽에만 존재시작 심볼: S(N에 속함)CFG의 유도입력된 문장이 문법에 맞는지 검사하는것을 유도라고 한다.유도가 가능하다면 문법에 맞는 스..
2024.05.04 09:35 -
[프로그래밍 언어론] 1. 프로그래밍 언어의 종류와 특징
프로그래밍 언어 평가 요소 프로그래밍 언어 평가는 언어의 기능, 사용 편의성, 신뢰성 등을 종합적으로 고려하여 이루어집니다. 주요 평가 요소는 다음과 같습니다.1. 가독성 (Readability)프로그램을 얼마나 쉽게 읽고 이해할 수 있는지명확하고 간결한 문법, 자연스러운 표현 방식, 적절한 주석 사용 등이 중요예시: Python, Java2. 작성 용이성 (Writability)프로그램을 얼마나 쉽게 작성할 수 있는지간결하고 명확한 코드 작성을 가능하게 하는 표현력, 다양한 기능 제공 등이 중요예시: Python, JavaScript3. 신뢰성 (Reliability)프로그램이 예상대로 정확하게 작동하는지타입 검사, 예외 처리, 메모리 관리 등을 통한 신뢰성 확보가 중요예시: Java, C++프로그래밍..
2024.05.04 00:41