한 것

공부 및 독서

[✅] TIL 작성

[AA][] 이펙티브 자바 공부

  => [] 2 ~ 12장 2회독

  => 중요한 부분 밑줄 치면서 읽는 중

[A][❌] 자바의 신 책 공부(복습)

  => 자바의신 복습 보다는 이펙티브 자바 공부가 우선

  => 이펙티브 자바 공부하는데 상당히 많은 시간이 소요되고 있다.

[A][✅] 알고리즘 한 문제 풀기 => 10866번 문제

[C][✅] 1일 1커밋 & 푸쉬

 

 

운동

[A][] 헬스장 가기

[A][] 헬스장에 가서 가슴운동

[A][] 헬스장에서 천 고개 계단 500칼로리

[B][] 운동 후찬물 샤워하기

  => 공부할게 많고 빨리 해야 된다는 마음에 운동에 갈 시간과 에너지가 없다.

 

기타

[A][] 아침 일어나자마자 침대에서 긍정 확언하기

  => 잠자기 전에 긍정 확언

[A][✅] 아침에 오늘의 명언 찾아서 적기

[A][] 아침 5분 일기 작성

[A][] 잠자기 전에 5분 일기 작성하면서 하루 피드백하기

[B][] 명상 10분하기

  => 독서실에서 공부가 끝난 시간에 바로 하루 피드백을 진행하자.

 

 

❓ 오늘의 질문, 배운 것

  •  

 

 

📣 피드백

  • 조급해하지 말고 꾸준히 정리하고 공부한다는 생각으로 하자.
  • 공부는 최대한 독서실에서 진행
    => 집에서 공부할려고 하면 피곤해서 자는 경우가 많다.

 

 

오늘 공부 시간 인증

  • 타이머 앱을 사용해서 시간을 측정해서 해당부분 캡처 인증
반응형

'IT > TIL' 카테고리의 다른 글

2023년 01월 14일 TIL  (0) 2023.01.14
2023년 01월 13일 TIL  (0) 2023.01.13
2023년 01월 11일 TIL  (0) 2023.01.11
2023년 01월 10일 TIL  (0) 2023.01.10
2023년 01월 09일 TIL  (0) 2023.01.09
나에게 나무를 자를 여섯 시간을 준다면,
나는 먼저 네 시간을 도끼를 날카롭게 하는 데에 쓰겠다
- 에이브러햄 링컨 -

한 것

공부 및 독서

[✅] TIL 작성

[AA][] 이펙티브 자바 공부

  => [✅] 2 ~ 12장 1회독(제목과 중요 내용 위주로 빠르게 보기)
  => [❌] 2 ~ 12장 2회독

  => 공부법 관련해서 틀을 잡는데 꽤 시간이 걸렸다. 내일부터 새로운 공부법으로 진행

[AA][] 공부법 관련해서 내용 정리 => 참고할 영상 링크

[A][] 자바의 신 책 공부(복습)

  => 이펙티브 자바 2회독을 하면서 내용 정리를 해야해서 시간을 많이 사용하고 있다.

  => 조급해하지 말고 모르는걸 꼼꼼하게 공부하자.

[A][] 알고리즘 한 문제

[C][] 1일 1커밋 & 푸쉬

 

 

운동

[A][] 헬스장 가기

[A][] 헬스장에 가서 가슴운동

[A][] 헬스장에서 천 고개 계단 500칼로리

[B][] 운동 후찬물 샤워하기

  => 지인분과 약속이 있고 이펙티브 자바를 끝내야 된다는 생각에 운동의 우선순위가 뒤로 밀림

 

 

기타

[A][] 아침 일어나자마자 침대에서 긍정 확언하기

[A][] 아침에 오늘의 명언 찾아서 적기

[A][] 아침 5분 일기 작성

[A][] 잠자기 전에 5분 일기 작성하면서 하루 피드백하기

[B][] 명상 10분하기

  => 시간을 만들어서라도 명상을 했어야 했는데 안했다.

 

 

❓ 오늘의 질문, 배운 것

1. 책을 읽는 방법

  1. 표지, 약력부터 읽을 것
    => 뒷면도 포함
    => 책의 전체적인 정보와 방향성을 파악
  2. 전체 목차와 세부목차를 읽을 것
  3. 세부목차만 읽으며 널어갈 것
    => 대, 소 제목들
    => 열심히 읽는다 == 어렵다
    => 너무 어렵게 생각하지 말고 성취감을 쌓아가기
    => 처음 읽을 때 내용을 이해하려 노력하지 말 것
    => 처음은 '눈에 바른다'는 느낌으로 빠르게 쭉 '볼 것' 
    => 머리에 남지 않아도(=이해) 일단은 '본다'
    => 인지가 없이는 이해도 없다.
    => 횟수, 시간에 신경쓰지 말고 30분간 반복해서 '볼 것'
    * 구체적 내용, 표현을 외운 사람 vs 제목들을 외운 사람
  4. 다음에 나올 말이 대충 떠오를 때 쯤 '읽기' 시작

 

 

📣 피드백

  • 운동은 시간을 만들어서라도 꼭 갔다오자.
  • 책으로 공부를 할 때 대충 넘어가면 시간만 낭비하게 된다.

 

 

오늘 공부 시간 인증

  • 타이머 앱을 사용해서 시간을 측정해서 해당부분 캡처 인증
반응형

'IT > TIL' 카테고리의 다른 글

2023년 01월 13일 TIL  (0) 2023.01.13
2023년 01월 12일 TIL  (0) 2023.01.12
2023년 01월 10일 TIL  (0) 2023.01.10
2023년 01월 09일 TIL  (0) 2023.01.09
2023년 01월 08일 TIL  (0) 2023.01.08

# 문제 출제 사이트

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

# 문제

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.

이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다.

우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.

예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다.

1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다.

3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.

N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.

 

# 입력

첫째 줄에 정수 N(1 ≤ N ≤ 500,000)이 주어진다.

 

# 출력

첫째 줄에 남게 되는 카드의 번호를 출력한다.

 

 

# 제출한 소스코드

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        Deque<Integer> deque = new LinkedList();

        for (int i = 1; i <= n; i++ ) {
            deque.addLast(i);
        }

        boolean isDelete = true;
        while(deque.size() != 1) {
            if (isDelete) {
                deque.removeFirst();
                isDelete = false;
            } else {
                deque.addLast(deque.removeFirst());
                isDelete = true;
            }
        }
        System.out.println(deque.removeFirst());
    }
}

 

반응형
성공으로 가는 엘리베이터는 고장입니다.
당신은 계단을 이용해야만 합니다.
한 계단 한 계단 씩
– 조 지라드 -

 

한 것

공부 및 독서

[✅] TIL 작성

[AA][] 이펙티브 자바 공부

  => [✅] 2장 1 회독

  => [✅] 3장 1 회독

  => [❌] 4장 1 회독

  => [❌] 5장 1 회독

  => [❌] 6장 1 회독

  => [❌] 7장 1 회독

  => [❌] 8장 1 회독

  => [❌] 9장 1 회독

  => [❌] 10장 1 회독

  => [❌] 11장 1 회독

  => [❌] 12장 1 회독

  => 1회 독을빠르게 하는게 과연 도움이 되는지 생각해봐야겠다.

  => 책 정리(밑줄, 내용정리)가 정말 중요하다.

  => 노트 필기가 가능한 어플리케이션을 찾고 다운받기

[AA][] 자바 공부

  => 이펙티브 자바 공부에 시간을 거의 다 쓰고 있다.

[A][✅] 알고리즘 한 문제 => 링크

[C][] 1일 1커밋 & 푸쉬

[C][] 벨로그 목차 정리

  => 벨로그 정리는 이펙티브 자바와 공부법을 어느정도 확립한 후에 진행 예정

 

 

운동

[AA][] 골반교정운동 및 스트레칭

[A][] 헬스장 가기

[A][] 헬스장에 가서 등운동

[A][] 헬스장에서 천 고개 계단 500칼로리

[B][] 운동 후찬물 샤워하기

  => 운동은 무조건 시간을 내서 하고 스트레칭은 틈 나는대로 하기

 

 

기타

[A][] 아침 일어나자마자 침대에서 긍정 확언하기

[A][] 아침에 오늘의 명언 찾아서 적기

[A][] 아침 5분 일기 작성

[A][] 잠자기 전에 5분 일기 작성하면서 하루 피드백하기

[B][] 명상 10분하기

  => 피드백은 무슨일이 있어도 꼭 하고 자기

 

 

❓ 오늘의 질문, 배운 것

  •  

 

 

📣 피드백

  • 피드백을 하지 않고 그냥 자버림
    => 피드백을 통해 개선을 해나가는게 제일 중요하다.
    => 피드백을 통해 내일을 어떻게 더 효율적으로 나아갈지 준비해야 한다.
  • 공부법 자체를 제대로 알지 못하고 무턱대고 하고 있다.
    => 열심히는 하고 있지만 효율이 너무 떨어지는 공부
    => 시간은 꾸준히 유지하되 공부법을 차근차근 개선하자.

 

 

오늘 공부 시간 인증

  • 타이머 앱을 사용해서 시간을 측정해서 해당부분 캡처 인증
반응형

'IT > TIL' 카테고리의 다른 글

2023년 01월 12일 TIL  (0) 2023.01.12
2023년 01월 11일 TIL  (0) 2023.01.11
2023년 01월 09일 TIL  (0) 2023.01.09
2023년 01월 08일 TIL  (0) 2023.01.08
2023년 01월 07일 TIL  (0) 2023.01.07

# 문제 출제 사이트

https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

 

# 문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다.

주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

 

 

# 입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다.

각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

 

# 출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

 

 

# 제출한 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        while (true) {
            st = new StringTokenizer(br.readLine());
            int num1 = Integer.parseInt(st.nextToken());

            if (num1 == 0) break;

            int num2 = Integer.parseInt(st.nextToken());
            int num3 = Integer.parseInt(st.nextToken());

            int[] numArr = {num1, num2, num3};
            Arrays.sort(numArr);

            if (numArr[2] * numArr[2] == numArr[0] * numArr[0] + numArr[1] * numArr[1]) {
                System.out.println("right");
            } else {
                System.out.println("wrong");
            }

        }
    }
}

 

 

# 참고자료

  • 수학방 [삼각형 세 변의 길이와 각 크기] => 링크
반응형
배우기만 하고 생각하지 않으면 얻음이 없고,
생각만 하고 배우지 않으면 위태롭다
- 공자 -

 

 한 것

공부 및 독서

[✅] TIL 작성

[AA][] 이펙티브 자바 공부 계획 작성

[AA][] 자바 스터디 시작

  => [✅] 스터디 노션 정리

  => 블로그가 아닌 노션에 우선 정리 예정

  => 하나의 챕터를 배우면 꼬리에 꼬리를 무는 생각으로 고민하고 찾아보며 공부

[AA][] 이펙티브 자바 3rd 에디션, 개발자가 반드시 알아야 할 자바 성능 튜닝 이야기 책 구매

[A][] 알고리즘 한문제

[C][] 1일 1커밋 & 푸쉬

[D][❌] 벨로그 목차 정리

  => 이펙티브 자바와 자바 공부에 집중하고 나머지에는 시간을 최대한 줄인다.

  => 이펙티브 자바와 자바 스터디 세부 계획을 블로그에도 간략하게 작성(오늘 할 것 위주로)

 

 

 

운동

[A][] 헬스장 가기

[A][] 헬스장에 가서 등운동

[A][] 헬스장에서 천 고개 계단 500칼로리

[B][] 운동 후찬물 샤워하기

[B][] 홈트 맨몸 스쿼트 100개

[B][] 홈트 맨몸 런지 100개

[B][] 홈트 무릎 대고 팔굽혀펴기 100개

  => 취업 전까지는 새벽에 운동을 갔다오는걸로 습관 형성

 

 

기타

[A][] 아침 일어나자마자 침대에서 긍정 확언하기

[A][] 아침에 오늘의 명언 찾아서 적기

[A][] 아침 5분 일기 작성

[A][] 잠자기 전에 5분 일기 작성하면서 하루 피드백하기

[B][] 명상 10분하기

[D][] 발성연습 유튜브 영상 2개 따라 하기

 

 

❓ 오늘의 질문, 배운 것

1. 오늘의 명언을 보고 든 나의 생각

명언을 읽고 반성을 하게 되었다. 반성한 내용을 글로 적어볼려고 한다.

  • 단순히 강의를 듣거나 책을 읽는 행위만 하고 공부를 했다 생각하고 넘어간 적이 많다.
    => 헛똑똑이 되는 지름길이였다. 자기만족도는 늘어나지만 진짜를 만나면 위축되고 금방 들키게 된다.
    겸손함을 가지고 배움에 열려있는 자세를 가지자.
  • 20대 초반에 생각만 많고 소심해서 행동을 안했을 때가 생각난다.
    => 요즘은 행동력이 훨씬 많이 늘었다.
    하지만 그 상황에 맞게 생각을 하는것도 상당한 트레이닝이 필요하다는 것을 알게되었다.

 

 

📣 피드백

  • [선택과 집중] 자바에대한 깊이를 우선적으로 가져갈 수 있도록 공부 방향 변경
  • 공부 시간이 너무 적다.
    => 알바, 식사시간을 제외하고는 남는 시간이 상당히 많은데 5시간은 말도 안된다.

    => 목표를 10시간으로 잡고 공부
    => 공부 시간보다는 집중하는 시간이 중요하다고 하지만 우선 앉아 있어야 집중을 시도해 볼 수 있다.

 

 

오늘 공부 시간 인증

  • 타이머 앱을 사용해서 시간을 측정해서 해당부분 캡처 인증
반응형

'IT > TIL' 카테고리의 다른 글

2023년 01월 11일 TIL  (0) 2023.01.11
2023년 01월 10일 TIL  (0) 2023.01.10
2023년 01월 08일 TIL  (0) 2023.01.08
2023년 01월 07일 TIL  (0) 2023.01.07
2023년 01월 06일 TIL  (0) 2023.01.06

🔗 참고자료

  • 백준 문제 큐(10845번) => 링크

 

 

 

✍ 공부하게 된 계기

알고리즘 문제에서 큐에대한 개념이 나왔는데, 조건문을 사용하면 쉽게 해결할 수 있는 문제였습니다.

그런데 단순히 정답을 위해서 풀면 나중에 큐(Queue)관련 문제가 나올 때 제대로 풀 지 못할것 같았습니다.

그래서 좀 더 깊게 파보고 큐(Queue)를 직접 구현해보기로 했습니다.

자료구조를 공부하면서 정말 많은것을 배우고 있습니다.

  • 자바의 내부함수 구조를 직접 뜯어보고 어떻게 구현되어있는지 확인하는 계기
  • 단순히 자바에서 잘 구현되어있는 List를 계속 사용만 한다면 추상화되어있는 개념만 가질 수 있었을겁니다.
    그런데 '한번 구현해보면 어떨까?' 라는 생각으로 인해 자료구조에 더 친해지는 계기가 되었습니다.

 

 

 

 

 

❓ 큐(Queue)란

  • 큐는 한국어로 "대기줄" 을 뜻합니다.
    => 그래서 큐를 설명하는 강의를 보면 줄서서 기다리는 사람들을 예시로 많이 설명하는 것을 볼 수 있습니다.
  • 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식을 말합니다.
  • 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼너 주을 선 사람이 먼저 나가는 것과 같습니다.

 

 

 

 

 

 

💻 구현한 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        customQueue<Integer> customQueue = new customQueue<>();

        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String command = st.nextToken();

            switch (command) {
                case "push":
                    customQueue.push(Integer.parseInt(st.nextToken()));
                    break;

                case "pop":
                    sb.append(customQueue.pop()).append("\n");
                    break;

                case "size":
                    sb.append(customQueue.size()).append("\n");
                    break;

                case "empty":
                    sb.append(customQueue.empty()).append("\n");
                    break;

                case "front":
                    sb.append(customQueue.front()).append("\n");
                    break;

                case "back":
                    sb.append(customQueue.back()).append("\n");
                    break;
            }
        }
        System.out.println(sb);
    }
}

class customQueue<T> {

    transient  Node<T> first;
    transient  Node<T> last;
    int size = 0;


    public void push(T e) {
        final Node<T> l = last;
        final Node<T> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
    }

    public String pop() {
        if (size ==0) return "-1";
        final Node<T> f = first;
        final T element = f.item;
        final Node<T> next = f.next;
        f.item = null;
        f.next = null;
        first = next;
        if (next == null)
            last = null;
        else
            next.prev = null;
        size--;
        return element.toString();
    }

    public int size() {
        return size;
    }

    public int empty() {
        if (size == 0) return 1;
        else return 0;
    }

    public T front() {
        if (first == null) return (T) "-1";
        return first.item;
    }

    public T back() {
        if (last == null) return (T) "-1";
        return last.item;
    }


    private class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }
}

 

반응형
미래를 신뢰하지 마라,
죽은 과거는 묻어버려라,
그리고 살아있는 현재에 행동하라.
- 롱펠로 -

 

한 것

공부 및 독서

[✅] TIL 작성

[A][❌] 큐(Queue) 직접 구현하고 블로그에 내용 정리하기 => 링크

  => [] 구현한 소스코드 단계별로 나눠서 글로 적기

  => [] 구현하면서 처음보는 단어들 개념 정리

  => [] 큐를 이해하는데 도움을 주는 이미지 찾아보기

[A][] 책 <개발자 리부트> 30분 읽기

[A][] 책 <개발자 리부트> 읽고 간단하게라도 감상문 작성하기

[B][] 자바 웹 프로그래밍 Next Step 3장 과제 => 링크

  => [] 그림으로 배우는 HTTP&Network Basic 책 참고해서 블로그글 내용보완

  * 블로그 글 내용 보완은 오늘 내로 끝내고 다음장 진행

[B][] 사이드프로젝트 할 일 한 개라도 블로그에 작성하기

[B][] 이력서 작성한 것 3분 안에 한번 읽어보기

[C][] 1일 1커밋 & 푸쉬

[C][ ] Dispatcher Sevlet 직접 구현해 보기(보류) => 링크

 

 

운동

[A][] 헬스장 가기

[A][] 헬스장에 가서 등운동

[A][] 헬스장에서 천 고개 계단 500칼로리

[B][] 운동 후찬물 샤워하기

[B][] 홈트 맨몸 스쿼트 100개

[B][] 홈트 맨몸 런지 100개

[B][] 홈트 무릎 대고 팔굽혀펴기 100개

 

 

기타

[AA][] To Do List에서 정리해야 할 것들 삭선(ㅡ)표시

[A][] 아침 일어나자마자 침대에서 긍정 확언하기

[A][✅] 아침에 오늘의 명언 찾아서 적기

[A][✅] 아침 5분 일기 작성

[A][] 잠자기 전에 5분 일기 작성하면서 하루 피드백하기

[B][] 명상 10분하기

[D][] 발성연습 유튜브 영상 2개 따라 하기

 

 

❓ 오늘의 질문, 배운 것

  •  

 

 

📣 피드백

  • f-lab 교육기관 과정에 맞게 To Do List 수정
    => 우선적으로 자바를 깊게 공부
    => 병행이 가능할지 생각해보고 병행이 가능한 일 적기
    => 제외해야 할 것들 리스트 정리
  • 오늘 할 일 전부 새롭게 정리하기

 

 

오늘 공부 시간 인증

  • 타이머 앱을 사용해서 시간을 측정해서 해당부분 캡처 인증
반응형

'IT > TIL' 카테고리의 다른 글

2023년 01월 10일 TIL  (0) 2023.01.10
2023년 01월 09일 TIL  (0) 2023.01.09
2023년 01월 07일 TIL  (0) 2023.01.07
2023년 01월 06일 TIL  (0) 2023.01.06
2023년 01월 05일 TIL  (0) 2023.01.05
시간의 걸음걸이에는 세 가지가 있다.
미래는 주저하면서 다가오고,
현재는 화살처럼 날아가고,
과거는 영원히 정지하고 있다.
- 프리드리히 실러 -

 

 

한 것

공부 및 독서

[✅] TIL 작성

[A][❌] 큐(Queue) 직접 구현하고 블로그에 내용 정리하기

[A][] 스택(Stack) 직접 구현하고 블로그에 내용 정리하기

[A][✅] 책 <개발자 리부트> 30분 읽기

[A][] 책 <개발자 리부트> 읽고 간단하게라도 감상문 작성하기

[B][] 자바 웹 프로그래밍 Next Step 3장 과제 => 링크

  => [] 그림으로 배우는 HTTP&Network Basic 책 참고해서 블로그글 내용보완

  * 블로그 글 내용 보완은 오늘 내로 끝내고 다음장 진행

[B][] 사이드프로젝트 할 일 한 개라도 블로그에 작성하기

[B][] 이력서 작성한 것 한번 읽어보기

[C][] 1일 1커밋 & 푸쉬

[C][ ] Dispatcher Sevlet 직접 구현해 보기(보류) => 링크

 => 아침부터 미용실, 장보기부터 오후에는 교육기관 OT를 저녁까지 참석했다.
 => OT가 끝나고 집 도착 후 적어도 3시간은 공부할 수 있었는데 공부를 안했다.
 => '주말 하루정도는 괜찮겠지' 라는 생각의 보상심리가 있었다. 적어도 한시간은 공부를 해도 좋았을텐데 말이다.

 

 

운동

[A][] 헬스장 가기

[A][] 헬스장에 가서 하체운동

[A][] 헬스장에서 천 고개 계단 500칼로리

[B][] 운동 후찬물 샤워하기

[B][] 홈트 맨몸 스쿼트 100개

[B][] 홈트 맨몸 런지 100개

[B][] 홈트 무릎 대고 팔굽혀펴기 100개

 

기타

[A][] 아침 일어나자마자 침대에서 긍정 확언하기

[A][] 아침에 오늘의 명언 찾아서 적기

[A][✅] 아침 5분 일기 작성

[A][] 잠자기 전에 5분 일기 작성하면서 하루 피드백하기

[B][] 명상 10분하기

[D][] 발성연습 유튜브 영상 2개 따라 하기

  => 제일 중요한 피드백을 안하고 잤다.

  => 침대에서 유튜브를 보다가 잠들었다.

 

 

❓ 오늘의 질문, 배운 것

1. 교육기관 OT

  • 정말 상당히 많은 것들을 배웠습니다.
    => 그 내용을 그냥 듣고 끝나는게 아니라  하나하나 글로 작성해 나의 생각을 적어보자.

 

 

📣 피드백

  • 뜻깊고 꽤 열심히 보낸 하루이지만 실질적인 공부를 안했다.
  • 오늘의 실수를 내일 반복하지 말자.

 

 

오늘 공부 시간 인증

  • 타이머 앱을 사용해서 시간을 측정해서 해당 부분 캡처 인증
반응형

'IT > TIL' 카테고리의 다른 글

2023년 01월 09일 TIL  (0) 2023.01.09
2023년 01월 08일 TIL  (0) 2023.01.08
2023년 01월 06일 TIL  (0) 2023.01.06
2023년 01월 05일 TIL  (0) 2023.01.05
2023년 01월 04일 TIL  (0) 2023.01.04

# 문제 출제 사이트

https://www.acmicpc.net/problem/10845

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

# 문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

 

# 입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다.

둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.

문제에 나와있지 않은 명령이 주어지는 경우는 없다.

 

# 출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

 

 

# 제출한 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st;

        LinkedList<Integer> queue = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String command = st.nextToken();

            if (command.equals("push")) {
                queue.offer(Integer.parseInt(st.nextToken()));
            } else if (command.equals("pop")) {
                if (queue.isEmpty()) System.out.println("-1");
                else System.out.println(queue.poll());
            } else if (command.equals("size")) {
                System.out.println(queue.size());
            } else if (command.equals("empty")) {
                if (queue.isEmpty()) System.out.println("1");
                else System.out.println("0");
            } else if (command.equals("front")) {
                if (queue.isEmpty()) System.out.println("-1");
                else System.out.println(queue.peek());
            } else if (command.equals("back")) {
                if (queue.isEmpty()) System.out.println("-1");
                else System.out.println(queue.getLast());
            }
        }
    }
}
  • "back" 부분을 해결하기 위해 Deque를 사용해 버렸다.
    => Deque를 사용하지 않고 "back" 조건을 해결해보기로 했다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st;

        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String command = st.nextToken();

            if (command.equals("push")) {
                queue.offer(Integer.parseInt(st.nextToken()));
            } else if (command.equals("pop")) {
                if (queue.isEmpty()) System.out.println("-1");
                else System.out.println(queue.poll());
            } else if (command.equals("size")) {
                System.out.println(queue.size());
            } else if (command.equals("empty")) {
                if (queue.isEmpty()) System.out.println("1");
                else System.out.println("0");
            } else if (command.equals("front")) {
                if (queue.isEmpty()) System.out.println("-1");
                else System.out.println(queue.peek());
            } else if (command.equals("back")) {
                System.out.println(queueBack(queue));
            }
        }
    }

    private static String queueBack(Queue<Integer> queue) {
        if (queue.isEmpty()) { return "-1"; }
        int n = queue.size();
        for (int i = 1; i <= n - 1; i++) {
            queue.add(queue.remove());
        }
        int result = queue.peek();
        queue.add(queue.remove());
        return String.valueOf(result);
    }
}
  • 함수를 따로 만들어서 문제를 해결했다.
  • "back"
    1. queue.isEmpty()가 true이면 "-1"을 리턴한다.
    2. queue의 사이즈의 - 1(n - 1)만큼 반복문을 돌려서 제일 먼저 들어가있는 값들을 다시 넣어준다.
    3."back"에 적합한 숫자가 제일 앞에 와있기 때문에 해당 숫자를 peek() 한다.
    4. "back"에 조건에 부합한 숫자(맨 뒤에 있던 숫자)를 다시 맨 뒤에 넣어준다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        customQueue<Integer> customQueue = new customQueue<>();

        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String command = st.nextToken();

            switch (command) {
                case "push":
                    customQueue.push(Integer.parseInt(st.nextToken()));
                    break;

                case "pop":
                    sb.append(customQueue.pop()).append("\n");
                    break;

                case "size":
                    sb.append(customQueue.size()).append("\n");
                    break;

                case "empty":
                    sb.append(customQueue.empty()).append("\n");
                    break;

                case "front":
                    sb.append(customQueue.front()).append("\n");
                    break;

                case "back":
                    sb.append(customQueue.back()).append("\n");
                    break;
            }
        }
        System.out.println(sb);
    }
}

class customQueue<T> {

    transient  Node<T> first;
    transient  Node<T> last;
    int size = 0;


    public void push(T e) {
        final Node<T> l = last;
        final Node<T> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
    }

    public String pop() {
        if (size ==0) return "-1";
        final Node<T> f = first;
        final T element = f.item;
        final Node<T> next = f.next;
        f.item = null;
        f.next = null;
        first = next;
        if (next == null)
            last = null;
        else
            next.prev = null;
        size--;
        return element.toString();
    }

    public int size() {
        return size;
    }

    public int empty() {
        if (size == 0) return 1;
        else return 0;
    }

    public T front() {
        if (first == null) return (T) "-1";
        return first.item;
    }

    public T back() {
        if (last == null) return (T) "-1";
        return last.item;
    }


    private class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }
}
  • LinkedList에 구현되어있는 코드를 참고해서 직접 queue를 구현했습니다.
    queue와 LinkedList의 구조도 배울 수 있고 상당히 도움이 되는 공부였습니다.
    => queue, stack 관련해서 직접 구현하고 블로그에 내용 정리하기(블로그글 링크)

 

 

 

# 참고자료

  • 블로그 <성장하는 코더의 스토리> => 링크
    => 위 블로그가 각 조건에 대해 설명도 잘 나와있다.

 

반응형

+ Recent posts