나는 오늘, (371) 썸네일형 리스트형 [BOJ] 1158. 요세푸스 문제 (C) *큐 구현 연습을 위해 C로 품. #include #include #include //큐 구현하기 #define MAXX 5001 struct Queue { int num[MAXX]; int front, back; }; int isEmpty(struct Queue *q) { if (q->back == q->front) return 1; return 0; } int isFull(struct Queue *q) { int tmp = (q->back+1)%MAXX; if (tmp == q->front) { //back+1 을 MAXX로 나눈 값이 front와 같으면 //가득 차 있다. return 1; } return 0; } void push(struct Queue *q, int data) { if (isFu.. [자료구조] Queue 구현하기 #include #include #define MAXX 10001 struct Queue { int front, back; int array[MAXX]; }; int isFull(struct Queue *q) { int tmp = (q->back+1)%MAXX; if (tmp == q->front) return 1; return 0; } int isEmpty(struct Queue *q){ if (q->back == q->front) return 1; return 0; } void push(struct Queue* q, int data) { if (isFull(q)) return; q->back = (q->back+1) % MAXX; q->array[q->back] = data; } int pop(str.. [자료구조] 연결리스트(Linked List) -구조체와 포인터로 구현 장점 *중간 삽입/ 삭제가 쉽다. (주소를 알아내서 서로 연결만 해 주면 된다.) *배열의 크기를 동적으로 할당받을 수 있다. 단점 *탐색 시간이 오래 걸린다. (타고 타고 들어가야 한다.) *포인터의 개념이 있기 때문에 한 번에 이해하기 어렵다 void addFirst(List *target, int data); void addLast(List *target, int data); void deleteEle(List*target, int pos); int isEmpty(List *target); #include #include struct ListNode { int data; struct ListNode *next; }; struct List{ struct ListNode *he.. [자료구조] 연결리스트(Linked List) 배열로 구현하기 -배열로 구현 장점 *특정 위치에 있는 값을 찾는 시간이 빠르다. *구현이 간단하다 단점 *삽입/ 삭제 시 오버헤드 (O(n)) *노드의 개수가 정적크기이다. (처음에 정해지고 변하지 않는다.) [배열로 구현] void addFirst(struct List *target, int data) void add (struct List *target, int data, int pos) :특정 위치에 값 삽입 void addLast(struct List *target, int data) void deleteEle(struct List *target, int pos) : 특정 위치의 값 삭제 void allClear(struct List *target) : 리스트 모두 초기화 int findValue(struct .. [BOJ] 18258. 큐2 *pypy3으로 제출해야 통과한다. (진짜 아슬아슬하게 시간 안에 들은 것 같다..) *파이썬 유저가 아니라서 더 이상 시간을 줄일 방법이 안 떠오른다. *input() 이 아니라 sys.stdin.readline 을 써야 한다. *c++에 scanf / java 에 bufferedReader 같이 입출력을 빠르게 해 주는 라이브러리 인 것 같다. *리스트를 큐로 구현했는데, pop(), index() 로 요소를 찾는 것보다는 size, idx 를 이용해서 투 포인터 같이 사용하는 게 더 빠르다. import sys read = sys.stdin.readline queue = [] idx = 0 size = 0 for _ in range(int(read())): order = read().rstrip(".. [BOJ] 1181. 단어 정렬 *정렬 조건을 두 개로 정한다. lambda로 단어의 길이 / 단어 사전순 오름차순으로 정렬하도록 한다. import operator n = int(input()) word = {} for _ in range(n): tmp = input() word[tmp] = len(tmp) sortWord = sorted(word.items(), key=lambda x : (x[1],x[0])) for i in sortWord: print(i[0]) [BOJ] 1475. 방 번호 *9는 6으로 치환해서 계산 *6의 개수는 2로 나눠서 반올림 한 만큼 저장한다. *digit 중 가장 큰 개수만큼 산다. import math num = input() digit = [0,0,0,0,0,0,0,0,0] for i in num: if (i == '9'): digit[6] += 1 else: digit[int(i)] += 1 #6,9는 각각 더해서 나누기 2한 값이 들어간다. digit[6] = math.ceil(digit[6]/2) max = 0 for i in digit: if (max < i) : max = i print(max) [BOJ] 4949. 균형잡힌 세상 *리스트를 스택처럼 사용 *예시 마지막에 [.] 도 yes이다. -> 끝내는 단어로 처리하면 안된다. while True: tmp = input() if(len(tmp) == 1 and tmp == '.'): break word =list(map(str, tmp.split())) stack = [] flag = True for i in word: if (i.find('(') != -1 or i.find('[') != -1 or i.find(')')!= -1 or i.find(']')!= -1): for j in range(len(i)) : if (i[j] == '(' or i[j] == '[') : stack.append(i[j]) elif(i[j] == ')') : if (len(stack) == 0).. 이전 1 ··· 5 6 7 8 9 10 11 ··· 47 다음