분류 전체보기 151

String과 char

알고리즘 문제를 풀다가 String으로 풀었을 때, char로 풀었을 때의 갭이 꽤 커서 머릿속에만 있는 개념을 정리하려고 한다. (물론 형만 바꾼 것은 아니고 구현 방식도 조금 바뀌었기 때문에 완전히 형(format)차이라고만 말할 수는 없지만.. 어떤 형을 선택해서 문제를 푸느냐에 따라 시간 차이가 꽤 커진다면.. 형 문제 때문이라고도 할 수 있지 않을까하는 구구절절한 마음..) char은 문자다! 자바에서 선언하려면 이렇게 써야한다. 'a', 'B', 'c' String은 문자열이다! 문자의 배열..! 문자열! "a", "aB", "c" 컴공 수업을 처음 듣던 나는 문자 하나면 문자! 문자 여러개면 문자열! 이라고만 생각했다. 그렇지 않다는 것은 꽤 이후에 깨달았다.. Java에서는 크게 형을 두 ..

좋은 코드 2022.10.14

[leetcode] Roman to Int

제약 조건 문자열의 크기는 15 문자열에 들어갈 수 있는 알파벳은 7개뿐.. 아무리 커도 3999까지밖에 안된다.. 그러니까.. I, ...., MMMCMXCIX 까지... 제출한 코드 문제를 제대로 안 읽고 되는대로 풀고 제출한 코드.. 문자열의 크기가 15였기 때문에 시간복잡도가 많이 커질 일이 없다고 생각했고 계산할 필요도 없지 않나 하고 생각함.. import java.util.Map; import java.util.HashMap; import java.util.StringTokenizer; class Solution { public int romanToInt(String s) { int answer = 0; Map roman = new HashMap(); roman.put("I", 1); rom..

알고리즘 2022.10.14

[leetcode] Two Sum

해석) nums라는 정수 배열과 정수 target이 주어졌을 때, 더했을 때 target이 되는 두 개의 숫자 indices(매핑 정보를 저장하는 데이터 공간..? or 인덱스 복수형) 를 리턴하세요. 각 입력값은 정확히 하나의 솔루션을 가진다고 가정하며, 같은 element(요소, 배열 내 구성을 일컫는 말인가봄) 를 두 번 사용하지 마세요. 순서는 아무렇게나 해서 정답을 리턴할 수 있어요. 시간 복잡도) O(n^2) 배열 nums를 이중 for문을 돌려서 하나하나 정답을 알아봐야겠다고 생각했다. 이중 for문이기 때문에 nums.length를 고려하는 부분이 중요했는데, 10000 * 10000 => 1억..으로 1초..? 정도로 보면 될 것 같다. Follow-up 질문이 O(n^2) 시간복잡도보다..

알고리즘 2022.10.13

[프로그래머스] 이진 변환 반복하기

프로그래머스 70129 https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분석 이진 변환을 반복하면서 몇 번 이진 변환을 진행했는지, 이진 변환을 진행하면서 제거한 0의 개수의 합을 answer 배열에 담으면 된다. 이진 변환을 멈추는 조건은 주어진 String s가 "1"이 될 때까지이다. replaceAll을 통해서 "0"을 모두 ""으로 변환하고 replaceAll을 하기 전 문자열과 한 후 문자열의 길이를 비교한다. 또한, 변환한 문자열의..

알고리즘 2022.09.11

[프로그래머스] JadenCase 문자열 만들기

프로그래머스 12951 https://school.programmers.co.kr/learn/courses/30/lessons/12951 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr String 메소드인 toLowerCase + 아스키코드 + StringBuilder를 사용해서 진행하였다. toUpperCase 메소드 대신 아스키코드와 StringBuilder를 사용하였다. 주어진 문자열을 toLowerCase로 모두 소문자로 바꾼 후 맨 첫번째 문자(index = 0)이거나 직전 문자가 공백일 경우 대문자로 변경한다. 이때, 아스키코드가 96이상인지 ..

알고리즘 2022.09.11

[프로그래머스] 숫자 문자열과 영단어

프로그래머스 81301번 https://school.programmers.co.kr/learn/courses/30/lessons/81301 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분석 one4seveneight을 다시 1478로 바꿔달라는 문제이다. 숫자에 대응되는 영단어의 알파벳 특징을 바탕으로 변환하였다. 주어진 문자열을 for문으로 하나씩 읽어들이면서 zero, one, eight, nine의 경우 첫 알파벳이 고유하다. 따라서 이 영단어를 만나면 곧장 바꿔주고 읽어들인 문자열 수만큼 for문 포인터를 이동시킨다. s로 시작하거나 t, f로 ..

알고리즘 2022.09.08

[백준] 나무 자르기

백준 2805번 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 프로그래머스 징검다리 건너기 문제를 풀고 이분 탐색이 입력값을 줄이고 문제를 최적화하는데 매우 좋다는 것을 알게 되었다. 입력값을 O(logN)해서 시간복잡도가 매우 줄어들게 된다. 분석 나무 자르기는 이분 탐색을 이용해서 풀어야하는 문제 중 하나이다. 결정 문제이고 Check(x)에서 x의 값에 따라 적어도 M미터의 나무를 집에 가지고 갈 ..

알고리즘 2022.09.04

[프로그래머스] 징검다리 건너기

프로그래머스 64062번 https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 효율성 부분이 있어서 입력값 개수를 봤더니 stones 배열의 크기가 최대 200,000개이고 각 원소들의 값이 최대 200,000,000이다. 각 stones에 200,000,000씩 들어가 있고 니니즈 친구들의 수는 2억명까지도 될 수 있기 때문에 그냥 배열 돌리기를 해버리면 입력값이 너무 커서 시간 초과가 뜨게 된다. 아래 코드는 그냥 배열 돌리기한 코드이다. 정확성..

알고리즘 2022.09.04

[프로그래머스] 불량 사용자

프로그래머스 64064문제 https://school.programmers.co.kr/learn/courses/30/lessons/64064?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 전처리 + 완전 탐색(조합) 문제로 판단하고 풀었다. 문제에서 경우의 수를 구하라고 나와있었기 때문에 경우의 수를 구할 수 있는 완전 탐색 방식을 선택하였다. 또한, 경우의 수만을 구하는 것이 중점이 아닌 불량 사용자의 아이디를 가려내는 것도 중요했기 때문에 이를 완전 탐색 직전 해야하는 전처리 작업이라고 생각하였다. 풀이 과정 1 (전처리 과정..

알고리즘 2022.09.04

[php] php란

PHP란 php는 대표적인 서버 사이드 스크립트 언어로, 웹 관련 내장 함수가 많아 웹 페이지 개발 시 생산성이 높다는 장점을 가지고 있다. Personal Home Page Tools의 약자였는데, 지금은 PHP: Hypertext Preprocessor라는 약자를 사용하고 있다. PHP 대표 특징 1. 인터프리터 언어 인터프리터란 컴파일 작업없이 소스를 실행할 때마다 해석해서 기계어 코드로 실행하는 것을 말한다. 인터프리터 언어를 바로 읽어들이면 실행가능하기 때문에 변경사항이 있을 경우 빠르게 고치고 컴파일, 빌드에 들어가는 시간 없이 바로 서버에 적용 가능하다. 2. 서버 사이드 스크립트 언어 PHP, JSP, Django 클라이언트에서 들어오는 요청을 서버로 보내서 서버에서 로직을 처리한 뒤 응답..

PHP 2022.08.28