728x90

숫자를 영어로 표현한 문자열을 숫자로 바꾸어 반환

 

public long solution(String numbers) {

long answer = 0;

int len = numbers.length();

while(numbers.length()>2){

 

if(numbers.startsWith("zero")){

answer= answer*10;

numbers= numbers.replaceFirst("zero","");

}else if(numbers.startsWith("one")){

answer= answer*10+1;

numbers=numbers.replaceFirst("one","");

}else if(numbers.startsWith("two")){

answer= answer*10+2;

numbers=numbers.replaceFirst("two","");

}else if(numbers.startsWith("three")){

answer= answer*10+3;

numbers=numbers.replaceFirst("three","");

}else if(numbers.startsWith("four")){

answer= answer*10+4;

numbers= numbers.replaceFirst("four","");

}else if(numbers.startsWith("five")){

answer= answer*10+5;

numbers= numbers.replaceFirst("five","");

}else if(numbers.startsWith("six")){

answer= answer*10+6;

numbers= numbers.replaceFirst("six","");

}else if(numbers.startsWith("seven")){

answer= answer*10+7;

numbers= numbers.replaceFirst("seven","");

}else if(numbers.startsWith("eight")){

answer= answer*10+8;

numbers= numbers.replaceFirst("eight","");

}else if(numbers.startsWith("nine")){

answer= answer*10+9;

numbers= numbers.replaceFirst("nine","");

}

if(numbers.length()<3)break;

}

return answer;

}

앞에서부터 영어 문자를 찾아 숫자로 치환 

 

개선 

 

public long solution2(String numbers) {

return Long.parseLong(

numbers.replaceAll("zero", "0")

.replaceAll("one", "1")

.replaceAll("two", "2")

.replaceAll("three", "3")

.replaceAll("four", "4")

.replaceAll("five", "5")

.replaceAll("six", "6")

.replaceAll("seven", "7")

.replaceAll("eight", "8")

.replaceAll("nine", "9")

);

}

모든 영문자를 치환하고 parseLong 메소드 사용 

 

개선

 

public long solution3(String numbers) {

String[] numbers_arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

 

for (int i = 0; i < numbers_arr.length; i++) {

numbers = numbers.replaceAll(numbers_arr[i], String.valueOf(i));

}

 

long answer = Long.parseLong(numbers);

return answer;

}

영문을 배열로 바꾸어 반복문을 사용하고 영문은 String.valueOf로 숫자형으로 변환

'Java > Coding Test' 카테고리의 다른 글

등수 매기기 문제풀이  (0) 2023.09.15
삼각형의 완성조건(2) 문제풀이  (0) 2023.09.15
공 던지기 문제풀이  (0) 2023.09.14
숨어있는 숫자 덧셈(2) 문제풀이  (0) 2023.09.13
외계어 사전  (0) 2023.09.12
728x90

공은 옆사람 건너띄고 다음사람에게만 던지며 

마지막 배열의 원소 다음은 처음 원소와 맞닿아 있다.

 

k번 던질 때 마지막으로 던지는 사람은?

 

public int solution(int[] numbers, int k) {

Queue<Integer> list = new LinkedList<>();

for (int j = 0; j < numbers.length; j++) {

list.offer(numbers[j]);

}

for (int i = 0; i < k-1; i++) {

list.offer(list.poll());

list.offer(list.poll());

}

return list.peek();

}

맨 마지막 사람과 처음 사람이 맞닿아 있는것을 표현하기위해서  Queue 로 표현했다.

 

 

다른 풀이

k-1번 던진다는 뜻은 0번 인덱스에서 +2씩 k-1번 인덱스로 옮긴다는것이다. 

=> 2k-2번 인덱스가  마지막으로 던질 사람이다. 

만약 3명이 3번 던진다면 5번인덱스 => 1,2,3,1,2   5번 인덱스는 ==2

식으로 나타내면 numbers[(2*k-2)%numbers.length+1]이다.

public int solution2(int[] numbers, int k) {

return numbers[(2*k-2)%numbers.length];

}

'Java > Coding Test' 카테고리의 다른 글

삼각형의 완성조건(2) 문제풀이  (0) 2023.09.15
영어가 싫어요 문제풀이  (0) 2023.09.14
숨어있는 숫자 덧셈(2) 문제풀이  (0) 2023.09.13
외계어 사전  (0) 2023.09.12
특이한 정렬 문제풀이  (1) 2023.09.12
728x90

 

Annotation 을 생성한다.

 

Annotation은 Interface형식이다

public @interface MyAnnotation {

String value() default "http://www.naver.com";

}

내부에는 어노테이션에서 받을 속성값을 적을 수 있는데 

기존 클래스 형식으로 적지 않는다.

String value() default "http://www.naver.com";

입력받을 값의 타입 속성명() 

default값을 설정할 수도 있다. 

 

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

@Documented

@Inherited

public @interface LoginCheck{

 

@Inherited

 

클래스 상속 관계에서 어노테이션을 상속받을 수 있는지 여부

이 어노테이션이 적용되면 하위클래스에서 상속된다.

 

@Documented

 

JavaDoc 문에서 문서화할 때 Annotation을 포함시킨다.

 

@Target

 

어노테이션을 어떤 요소에 적용할 것인지 지정

ex) 메소드로 지정되었으므로 메소드에만 적용가능하다

 

@Retention

 

어노테이션을 언제까지 유지할 것인지 지정

 

SOURCE: 컴파일 시점까지만 유지, 런타임시 정보 사용 불가

->컴파일러를 위한 정보나 코드 생성 도구에 사용

 

CLASS(default): 컴파일 ~ 런타임까지 유지, 런타임시 리플렉션(reflection)을 통해 어노테이션 정보를 얻을 수 없다. 

 

RUNTIME: 컴파일 ~ 런타임까지 유지, 리플렉션을 통해 어노테이션 정보를 얻을 수 있다. 

->런타임 동작에 영향을 주는 메타 데이터를 제공하는데 유용

 

@LoginCheck

@GetMapping("/user_logout_action")

public String user_logout_action(HttpSession session) {

session.removeAttribute("sUserId");

session.invalidate();

return "redirect:user_main";

}

@LoginCheck을 메소드에 적용하였다.

728x90

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

forEach태그

 

<c:forEach items="${guestList}" var="guest">

<tr>

<td width=50 align=center bgcolor="ffffff" height="20">${guest.guest_no}</td>

<td width=300 bgcolor="ffffff" style="padding-left:10"><a

href="guest_view?guest_no=${guest.guest_no}" class="user">${guest.guest_title}</a></td>

<td width=120 align=center bgcolor="ffffff">${guest.guest_date.substring(0,10)}</td>

</tr>

</c:forEach>

반복할 부분을 forEach태그로 감싼다.

items="순회할 List"

var="반복문에서 사용할 각 객체의 변수명"

 

if태그

<c:if test="${sUserId!=null}">

<s:message code="menu.id" arguments="${sUserId}"/>

</c:if>

test속성에 boolean 값을 반환할 수 있는 조건문을 입력한다. 

 

else, unless 태그는 없다. 

 

대신 choose 태그가 있다.

 

choose태그

 

이 태그는 when 태그를 사용해 if와 else if를 표현할 수 있다.

 

<c:choose>

      <c:when test="${empty sUserId }">

             <s:message code="menu.id" arguments="${sUserId}" />

      </c:when>

</c:choose>

choose 태그 안에 when 태그를 넣고 when 조건에 해당하면 태그 내의 코드를 수행한다.

'Java > Spring Boot' 카테고리의 다른 글

Thymeleaf in Spring  (0) 2023.09.14
Spring Interceptor  (0) 2023.09.14
Spring CustomTag SPEL(Spring Expression Language)  (0) 2023.09.13
Spring Boot Controller Type of Parameters  (0) 2023.09.13
Spring Boot DataSource 설정  (0) 2023.09.13

+ Recent posts