전체 글

Never stop acting like the new one on the team
Algorithm

정올/소시지공장

영훈이가 소시지 공장에 견학을 갔다. 그 소시지공장에서는 하나의 기계가 길이와 너비가 다양한 소시지를 만들어 내고 있었다. 유심히 살펴보니 그 기계는 현재 만들고 있는 소시지의 길이와 너비가 바로 전에 만들었던 소시지의 길이, 너비보다 크거나 같아야만 기계가 쉬지 않고 작동하고 있었다. 만약 현재 만들고 있는 소시지의 길이 또는 너비가 바로 전에 만든 것보다 작다면, 기계가 준비 작업을 하는데 1분이 소요된다는 것을 알았다. 영훈이는 주문 받은 소시지의 길이와 너비를 보고 어떤 소시지부터 만들어 나가는 것이 기계의 준비 작업에 소요되는 시간을 줄일 수 있을지 고민하고 있다. 주문받은 소시지들을 만드는데 기계가 준비 작업에 소요한 최소의 시간을 구하는 프로그램을 작성하시오. 단, 첫 소시지를 만들 때는 기..

Algorithm

정올/회의실배정

회의실이 하나 있다. 여러 회의들이 시작시간과 종료시간이 예약되어 있으며, 시간대가 겹치는 회의는 동시에 개최가 불가능하다. 따라서 같은 시간대에 속하는 회의들 중 하나만 개최하고 나머지 회의들은 버려야한다. 단, 종료시간과 시작시간이 같은 경우에는 시간이 겹친다고 말하지 않는다. 회의의 개수 N과 각 회의의 시작시간, 종료시간이 주어졌을 때 되도록 많은 회의를 개최하고자 한다. 회의를 최대한 많이 배정하는 프로그램을 작성하시오. 첫줄에는 회의의 수 N(5≤N≤500), 둘째 줄부터 i-1번 회의의 번호와 시작시간과 종료시간이 차례로 주어진다. (500 이하의 자연수) 첫줄에는 배정 가능한 최대의 회의수를 출력하고 다음 줄부터는 배정한 회의의 번호를 시간대순으로 출력한다. 만약, 답이 여러 가지(최대회의..

Algorithm

백준/2979/트럭주차

Code int main(){ int price1; int price2; int price3; int loop, loop2; int arr[100] = { 0, }; int max = 0; int i; int result1 = 0; int result2 = 0; int result3 = 0; scanf("%d %d %d", &price1, &price2, &price3); if (1

Algorithm

정올/실전대비/브라우저

표준 웹브라우저는 방문한 페이지들 내에서 이전 이후 페이지를 방문하는 기능이 있다. 이를 구현하는 방법으로 두 개의 스택을 이용하는 방법이 있다. 입력으로 아래의 명령들이 들어온다. BACK : 현재 페이지를 forward stack에 push, backward stack에서 pop하여 현재 페이지로 설정한다. backward stack이 비어있다면 명령을 무시한다. FORWARD : 현재 페이지를 backward stack에 push, forward stack에서 pop하여 현재 페이지로 설정한다. 만약 forward stack이 비었다면 명령은 무시된다. VISIT : 현재 페이지를 backward stack에 push, 입력된 URL을 현재 페이지로 설정. forward stack은 비운다. QUI..

Android/Development Tips

중첩 프래그먼트와 제어 및 헤드리스 프래그먼트

중첩 프래그먼트의 특징은 XML로 추가할 수가 없고, 항상 동적으로 추가해야한다. 그렇기 때문에 부모 프래그먼트는 자식 프레그먼트를 관리하고 자식프래그먼트가 UI를 담당하는 구조로 자주 설계된다. 액티비티에서 프래그먼트를 다룰 때는 getSupportFragmentManager()를 사용하였지만 중첩 프래그먼트를 다룰 때는, getChildFragmentManager()를 사용한다. public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInsta..

Android/Development Tips

커스텀 뷰의 초기화 시점

보통 캔버스에 그리는 것이 아닌 뷰그룹을 상속받아 내부에 뷰를 사용할때는 생성자에서 xml을 인플레이트 시키고, 이후 인플레이트 된 뷰들을 찾아 사용할때, 시점을 onCreate()에서 초기화 하여 사용했었는데, 더 정확한 시점이 있었다. public CircleProgressView(Context context) { super(context); initView(); //inflate } @Overrideprotected void onFinishInflate() { super.onFinishInflate(); mIvStar = findViewById(R.id.star); mIvRect = findViewById(R.id.rect); mIvCircle = findViewById(R.id.circle);} ..

Android/Development Tips

커스텀뷰와 merge 태그

커스텀 뷰를 만들때 상속받아 뷰와 커스텀 뷰를 포함하는 뷰 그룹과 불필요한 중첩을 피하기 위해 merge 태그를 사용한다. 가령 예를 들어 이런 식으로 사용하면 된다. merge 대신 LinearLayout을 사용할 수 있지만, 저 xml을 사용하는 커스텀 뷰가 LinearLayout을 상속받아 만든 것이라면 LinearLayout 안에 또 LinearLayout이 존재하는데 이 경우 중복 되기 때문에 merge를 사용하면 중첩을 피할수 있다.

Android/Development Tips

안드로이드 패딩과 마진

가끔 패딩과 마진을 헷갈하는 경우를 보아 간단히 정리. 패딩은 뷰 크기에 포함이 되지만, 마진은 포함 되지 않는다. 따라서 패딩으로 지정한 간격은 그 뷰의 배경색으로 칠해지고, 마진으로 지정된 간격은 공백으로 표현된다.

Android/Development Tips

액티비티의 백스택, taskAffinity

안드로이드 백스택은 몇번 봤는데도, 기억에 잘 남지 않아 가볍게 정리 해둡니다. 새로운 액티비티가 시작되면, 실행 중이던 액티비티는 백스택에 들어가게 된다. 그리고 시작된 액티비티는 태스크라는 그룹에 속한다. 내가 보는 책에서는 백스택에 대해서 3가지로 정리하고 있다. 같은 앱에서 시작된 액티비티는 같은 백스택에 쌓인다. TaskAffinity의 속성에 따라 소속되는 태스크가 달라진다. LaunchMode에 따라 액티비티 생성의 여부, 새로운 태스크에 속하는 등 액티비티의 시작이 달리진다. 백스택에 쌓인 액티비티는 뒤로가기 키 등으로 액티비티를 종료하면 스택 자료구조의 특징과 같게 위에서부터 차례로 꺼내어 제거된다. 또한 TaskAffinity는 태스크의 이름으로 이해하는 것이 더 이해하기 쉽다. Tas..

Nanamare
TEAM > SELF