programming 103

[안드로이드 프로그래밍 연습문제] Chapter 5 - 4번 (weigth 속성)

1. 문제 안내, 예시 화면 위의 화면을 XML파일로 만드시오. 단, 리니어레이아웃만 사용하고 각 렝아웃의 색상을 다르게 설정한다. 이 카테고리는 학교 강의에서는 풀지 않은 연습문제들의 풀이를 올리는 과제이다. 물론 실습문제들만을 올릴것이다. 연습문제가 아닌 직접 풀어보기와 같은 문제들도 올릴예정이다. 많은 글을 올렸으면 좋겠다. 2. 문제풀이 이 문제는 간단하다. 글로 설명하자면 레이아웃안에 최대 세개의 LinearLayout이 중첩된다고 생각하면 된다. 여기서 조금 어려운 부분은 바로 오른쪽 상단 부분이다. 긴 막대기 형태로 세개의 레이아웃이 배열되어 있는데 처음 보면 막막할 것 같다는 생각이 들 수 있다. 다만 weight속성과 LinearLayout의 orientation속성을 알고있다면 잘 해결..

[안드로이드 프로그래밍 예제] 직접 풀어보기 5-2

1. 문제 안내, 예제 화면 리니어레이아웃으로 다음 화면을 구성하는 XML을 작성하라. 단, 레이아웃이 구분되어보이도록 서로 다른 색으로 지정한다. HTML을 따로 공부했을 때, 대학과정이 아니어서 그런것인지는 모르겠지만, 레이아웃을 그렇게 깊게 공부하지 않았다. 그래서인지 모바일 프로그래밍을 공부할 때 레이아웃 단원에 조금 집중하기 위해 예제를 풀어보았고 자연스럽게 글을 올리게 되었다. 2. 풀이 과정 어찌보면 이번 문제는 리니어레이아웃(LinearLayout)를 얼마나 잘 다룰 수 있는지 확인하는 문제라고 생각한다. 문제를 보면 LinearLayout을 여러번 중첩해서 구현할 수 있는 것을 알 수 있다. 최대 3번까지의 레이아웃을 중첩하여 사용하였고 다음은 코드이다. 이 문제에서 중요한 점은 weig..

Python을 활용한 '여름 길이' 분석하기 - (한 해의 여름은 몇일일까?)

1. 개요 바로 전 게시물에서는 Python을 활용해서 매년 평균 온도를 분석하였다. 이 프로젝트를 진행하면서 기온에 대한 궁금증이 생긴 후, 여름에 대한 궁금증이 시작되었다. 내가 내린 결론은(코드가 완벽하다면) '서울의 평균 기온은 점점 올라가고 있다.' 이고 이는 '서울의 여름은 길어지고 있을까?' 라는 질문으로 이어졌다. 온도가 증가했으니 여름은 당연히 길어지지! 라고 말할 수 있지만, 봄, 겨울 가을의 평균 기온이 증가해도 같은 결과가 나올 수 있다. 궁금증이 생겼고 나는 Python으로 그래프를 그릴 수 있으니, 바로 코드를 작성하기 시작했다. 2. 코드설계 코드를 작성할 때 가장 중요한 것 중 하나는 명확한 조건이다. 나에게는 여름의 길이를 구분할 수 있는 기준이 필요했다. 구글링을 해보니,..

Python을 활용한 서울 평균온도 분석하기

1. 개요 Python으로 데이터를 다루는 것은 작년 말(2019.12월)에 얇은 책 한권으로 학습한 기억이 있다. 당시 책에 있는 내용은 csv형태의 데이터를 Python으로 가공하는 형태의 내용이었는데, 개인적으로 흥미롭게 공부했다. 내가 배우는 언어로 무엇을 할 수 있을지를 경험하기 위해 공부한 분야이기 때문에 그렇게 깊은 학습을 하지는 못하였지만 궁금한 점을 해결할 수준, 미래에 데이터 분석이라는 분야를 만났을 때 구글링을 통해 기억해내고 학습을 이어갈 수 있는 수준을 유지하기 위해 노력했다. 어쩌다 발견한 지구온도상승에 대한 뉴스를 보고 그 뉴스의 댓글창에 열심히 토론을 하고있는 댓글들을 보며 직접 평균 온도를 계산하여 그래프로 확인하면 좋을 것 같다는 생각에 그래프를 그려보았다. 나는 통계를 ..

[알고리즘] C++ vector을 활용한 정렬 구현(버블, 삽입, 퀵)

1. 이론 알고리즘 중에 제일 대표적인 '정렬' 알고리즘이다. 알고리즘을 전부 공부한 것은 아니지만 아마 알고리즘을 공부할 때 가장 기초적으로 공부하는 알고리즘인 것 같다. (C언어를 공부할 때도 나왔으니......) 버블과 삽입은 어려운 알고리즘은 아니라고 생각했지만(이미 완성된 알고리즘을 구현하는 것 밖에 하지 않았지만......), 퀵의 구현을 공부할 때는 "대체 어떤 천재가 이런걸 만든거지?" 라는 생각이 들 정도로 감명받았다. 다음은 각각의 알고리즘의 이론이다. - 버블 버블알고리즘의 이름이 '버블'인 이유는 밑에서 부터 큰 숫자들이 마치 거품처럼 보글보글 올라오는 모습과 비슷하다고 하여 만들어진 이름이다. 최대값을 하나씩 가려내는 알고리즘이라고 생각하면 이해하기 쉬울 것이다. 다음과 같이 순서..

[백준 알고리즘] 1929번 - 소수 구하기 (시간 초과, 소수 알고리즘)

1. 문제, 실행결과 예시 백준 알고리즘 카테고리에 글을 쓰는게 정말 오랜만인 것처럼 느껴진다. 아마 실제로도 오랜만일 것이다 ㅎㅎ. 이 문제에 대한 풀이를 올리는 이유는 시간 초과라는 새로운 문제를 만났기 때문이다. 실제로 소수를 구하는 문제는 정말 많이 풀어봤지만, 이번 문제의 최대 입력값은 100000으로 기존에 사용하던 방법( 1 ~ N 까지의 모든 수를 비교하는 방법 )을 사용하면 시간초과가 날 수 밖에 없었다.( 심지어 숫자 하나당 줄바꿈을 해야하는 문제이다. ) 때문에 소수를 찾는 다른 방법을 사용해야 했다. 방법은 아래에서 자세히 설명할 것이다. 다음은 문제와 실행결과 예시 이다. 출처: https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의..

[C언어, C++] 재귀함수 내에서 재귀호출을 두번 할때 주의점

1. 문제 자료구조 tree공부하다가 입력된 정수를 가지고있는 data를 찾아주는 함수를 작성하고 싶었다. 그 함수는 값을 반환함과 동시에 tree를 전체적으로 탐색하는 역할을 수행해야한다. Tree를 직접 구성해보신 분들은 알겠지만, tree의 탐색은 재귀함수로 작성하는 것이 정말 간편하다. (나도 내입에서 재귀함수가 편하다고 할줄은 몰랐다......) 문제는 여기서 발생한 것이다. root → 왼쪽 트리 → 오른쪽 트리 순으로 탐색하는 전위탐색을 구현하였는데, 왼쪽 탐색을 진행하여 결과가 없을 때, return문이 중간에 끼어있으면 오른쪽 트리를 탐색하지 않고 재귀를 멈추는 오류가 발생하였다. 따라서 재귀호출 안에서 재귀호출을 두번할 때 발생하는 문제에 대해 알 수 있게 코드를 작성해보았다. 2. 해..

[자료구조] - LinkedQueue 구현 (C++)

1. 개요 이번에 정리할 내용은 LinkedQueue에 관한 내용이다. Queue는 구현 방법에 따라 CircularQueue와 LinkedQueue 등으로 나눌 수 있는데 이 블로그에서는 LinkedQueue에 대한 설명만 진행할 것이다. 사실 Queue의 기능을 구현하는 방법은 정말 다양하지만 대표적인 두 방법으로 배열과 나머지연산을 활용하는 CircularQueue와 연결리스트로 구현하는 LinkedQueue가 있으니 CircularQueue도 꼭 공부해보기를 바란다. 2.이론 큐는 '나오는 방식이 조금 다른 스택' 이라고 생각하면 편하다. Stack과 같은 경우는 먼저 들어간 데이터가 가장 나중에 나오는 FILO 구조이지만, Queue와 같은 경우 가장 먼저 들어간것이 가장먼저 나오는 FIFO(F..

[백준 알고리즘] 2292번 - 벌집

1. 문제 및 예시 실행결과 수학 카테고리에서 문제를 풀기 전 문자열 카테고리와는 다른 종류의 겁이 들었던 기억이 난다. 코딩을 잘 한다는 것이 아직도 뭔지 모르겠다. 문법을 잘 알고, 에러를 만들지 않는 사람도 있고 수학적 기교로 코드수를 줄이거나 알고리즘을 잘 설계하는 사람이 있을 것이다. 전자와 후자 전부 대단하지만, 나는 이 모든 부류를 공부할 때 겁을 먹는 것 같다. 언젠가는 이런 겁도 안먹기를 바란다. 이번 문제는 규칙을 파악하는 것이 매우 중요한 문제이다.(모든 코딩문제가 그런 것 같지만......) 실제로 나는 이 문제를 위해 그림도 그렸다 ㅠㅠ 다음은 문제와 예시 실행결과이다. 출처: https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육..

[자료구조] - CircularDoubledLinkedList의 구현 (C++)

1. 개요 이번에 정리할 내용은 바로 Circular Doubled Linked List(원형 이중 연결 리스트) 이다. 드디어 객체지향 언어를 사용할 수 있게 되었다 ㅠㅠ 사실 OOP(객체 지향저) 적인 코드를 작성하는 회사에서는 이 OOP를 디자인하는 시간이 몇달이 걸린다고도 한다. 저번 글과 현재 작성하고 있는 글에 차이가 있다면 일주일동안 들은 객체지향 특강에서 배운 지식을 활용했다는 것이다. LinkedList를 C++로 작성하려고 해도 시도하지 못했지만, 이제는 C로 작성된 원형 이중 연결 리스트의 이론과 코드를 참고하여 C++로 구현하였다. 나름 뿌듯함을 느끼는 중이다. 2. 이론 사실 원형이중연결 리스트의 기능은 연결리스트와는 다르지 않다. 다만, 차이가 있다면 마지막을 찾는 연산을 하지 ..