본문 바로가기

Problem Solving/Algorithm Concepts23

[운영체제] 메모리 구조 (재귀호출 vs 반복문) 재귀에서 탈출조건(적절하게 빠져나오는 구문?)이 없으면 스택오버플로우가 발생한다. why? 스택에서 뭔 문제가 있겠지!! 스택이 존재하는 메모리 구조를 더 이해해두기 위해 포스팅한다. 메모리 구조 https://blog.naver.com/zzaxowns/222611286857 (참고블로그! 여기 더 자세하게 설명되어있는듯한..) 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같다. 코드(Code) 영역 실행할 프로그램의 코드가 저장되는 영역이다. 프로그램이 시작하고 끝날 때까지 메모리에 계속 남아 있는다. 컴파일된 기계어가 들어가게 된다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 데이터(Data) 영역 프로그램의 전역 변수와 정적 변수, 문자열 상수가 저장되는 영.. 2022. 1. 26.
[알고리즘] 재귀함수(Recursive function) 정리 & 문제 풀이(Python) 재귀함수 : 함수 안에서 자신의 함수를 다시 호출하는 방식 - 재귀, 즉 자기호출은 어떤 문제를 해결하는 과정에서 자신과 똑같지만 크기가 다른 문제를 발견하고 이들의 관계를 파악함으로써 문제 해결에 접근하는 방식이다. 재귀함수의 장점 - 반복문을 대신해서 재귀함수로 사용하게 되면 보다 간결한 코드 작성이 가능해진다. 재귀함수의 단점 - 연산이 느리다.(많은 연산을 필요로 한다는 얘기) - 재귀함수의 단점으로 인해 현재 실무에서는 거의 사용하지 않는다고 함. - 재귀함수 단점 보안으로 동적프로그래밍 사용 def recursive(): print("재귀함수") recursive() recursive() # 함수 호출 재귀함수를 사용할 때 가장 중요하게 봐야하는 것은 "탈출조건"이다. 위 코드와 같이 탈출조건.. 2022. 1. 13.
[Java Algorithm] 1-3 문장 속 단어( for each문, split(), indexOf(), substring()) * 문제 설명 문장 속의 각 단어는 공백으로 구분되고 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 문제 (출력: 첫 줄에 가장 긴 단어를 출력하고 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 함.) 예시 입력 1 it is time to study 예시 출력 1 study * 소스코드1 풀기 전 생각) 공백을 기준으로 나누면 되지 않을까? => split() 먼가 생각으로는 처음 나온 공백을 기준으로 앞 글자들을 묶고 공백이 나올 때마다 반복한 다음 그 묶여진 단어들을 배열에 넣어서 비교하면 되지 않을까? 싶음 => String[] arr = str.split(" "); 1. 공백으로 구분된 단어들을 입력받고 2. 해당 단어를 " "으로 spli.. 2021. 8. 16.
[Java Algorithm] 1-2 대소문자 변환(대문자는 소문자로, 소문자는 대문자로) // 대문자와 소문자가 같이 존재하는 문자열을 입력받아 // 대문자는 소문자로, 소문자는 대문자로 변환하는 프로그램 // 첫 줄에 문자열이 입력된다. 문자열 길이 100 안 넘음 import java.util.*; public class Practice_02 { public String solution(String str) { String answer = ""; for(char x : str.toCharArray()) { if(Character.isLowerCase(x)) answer+=Character.toUpperCase(x); else answer+=Character.toLowerCase(x); } return answer; } public static void main(String[] args) .. 2021. 8. 15.
[Java Algorithm] 1-1 문자 찾기(자바 한 문자만 입력 받기, 대소문자 변환) * 문제 설명 한 개의 문자열을 입력받고, 특정 문자를 입력받은 후 해당 특정문자가 대소문자에 관계없이 문자열에 몇 개 존재하는지 알아내어 출력해주는 문제 * 소스코드 package algorithm; import java.util.Scanner; public class Main { public int solution(String str, char t) { int answer = 0; str = str.toUpperCase(); //string이 대문자로 된다.! t = Character.toUpperCase(t); // t는 문자이기 때문에 Character라는 클래스에서 클래스에 있는 메서드 사용한다. for(int i = 0; i < str.length(); i++) { if(str.charAt(i.. 2021. 8. 14.